易语言取64位模块地址源码分享了。
.子程序 取64位模块地址, 长整数型, 公开, 只支持64位程序.参数 进程ID, 整数型
.参数 模块名, 文本型
.局部变量 pbi64, PROCESS_BASIC_INFORMATION64
.局部变量 ret, 整数型
.局部变量 Ulen, 整数型
.局部变量 Alen, 整数型
.局部变量 ldr, 长整数型
.局部变量 ModuleHandle, 长整数型
.局部变量 pName, 长整数型
.局部变量 Namebuf, 字节集
.局部变量 Name, 文本型
.局部变量 操作句柄, 整数型
操作句柄 = OpenProcess (#PROCESS_ALL_ACCESS, 0, 进程ID)
ret = NtWow64QueryInformationProcess64 (操作句柄, 0, pbi64, 48, 0)
.如果真 (ret = 0)
Alen = 取文本长度 (模块名)
Ulen = Alen × 2 + 1
Namebuf = 取空白字节集 (Ulen)
Name = 取空白文本 (Alen)
NtWow64ReadVirtualMemory64 (操作句柄, pbi64.PebBaseAddress + 24, ldr, 8, 0)' ldr = Read64bit (hProcess, pbi64.PebBaseAddress + 24, 8)
NtWow64ReadVirtualMemory64 (操作句柄, ldr + 24, ldr, 8, 0)' ldr = Read64bit (hProcess, ldr + 24, 8)
.循环判断首 ()
NtWow64ReadVirtualMemory64 (操作句柄, ldr + 48, ModuleHandle, 8, 0)' ModuleHandle = Read64bit (hProcess, ldr + 48, 8)
.如果真 (ModuleHandle = 0)
跳出循环 ()
.如果真结束
NtWow64ReadVirtualMemory64 (操作句柄, ldr + 96, pName, 8, 0)' pName = Read64bit (hProcess, ldr + 96, 8)
NtWow64ReadVirtualMemory64_Bin (操作句柄, pName, Namebuf, Ulen, 0)
WideCharToMultiByte (936, 0, Namebuf, Ulen, Name, Alen, “”, 0)
.如果真 (到小写 (Name) = 到小写 (模块名))
返回 (ModuleHandle)
.如果真结束
NtWow64ReadVirtualMemory64 (操作句柄, ldr + 8, ldr, 8, 0)
.循环判断尾 (ModuleHandle ≠ 0)
.如果真结束
返回 (0)
页:
[1]