David902 发表于 2024-3-5 09:30:48

易语言取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]
查看完整版本: 易语言取64位模块地址源码分享了。