【HSP3】HSPのDPMXを取得するアレ

アレはアレなんでアレなんです。

アレはアレなんでアレなんです。

#module Win32EXE
#defcfunc IsWin32App str fname
	tmp = 0
	exist fname
	if strsize == -1 : return 0
	bload fname, tmp, 2, 0
	if tmp == 0x5a4d /*MZ*/ : return 1
return 0
#defcfunc GetPEAddress str fname
	if IsWin32App(fname) == 0 : return -1
	tmp = 0 : pe_addr = 0
	exist fname
	if strsize == -1 : return -2
	bload fname, pe_addr, 4, 0x3c		// PEヘッダアドレス
	bload fname, tmp, 2, pe_addr		// PE実場所
	if tmp == 0x4550 : return pe_addr	// 一応チェック
return -3
#defcfunc GetRSRCAddress str fname
	pe = GetPEAddress(fname)
	if pe < 0 : return -1
	flg = 0 : sec = pe + 0xf8 : sdim s
	exist fname
	if strsize == -1 : return -2
	// .rsrcセクションを検索する
	repeat
		bload fname, s, 8, sec
		if s == "" : break
		if s == ".rsrc"{
			flg = 1
			break
		}
		sec += 40
	loop
	if flg == 0 : return -3
return sec
#deffunc GetRSRCData str fname, array rsrc_data
	dim rsrc_data, 40/4
	addr = GetRSRCAddress(fname)
	if addr < 0 : return -1
	exist fname
	if strsize == -1 : return -2
	bload fname, rsrc_data, 40, addr
return 0
#defcfunc GetDPMXAddress str fname
	GetRSRCData fname, rsrc
	if stat < 0 : return -1
	exist fname
	if strsize == -1 : return -2
	tmp = 0
	bload fname, tmp, 4, rsrc(5)+rsrc(4)
	if tmp == 0x584d5044 /*DPMX*/ : return rsrc(5) + rsrc(4)
return -3
#global

// DPMXの場所
mes GetDPMXAddress("hsptmp.exe")