我正在尝试从我可以处理的进程中获取模块的基地址。我已经使用 CreateToolhelp32Snapshot 和 EnumProcessModules 方法尝试过此操作。
问题是这两种方法都只返回这 5 个 DLL:
underrail.exe ndll.dll wow64.dll wow64win.dll wow64cpu.dll
我知道应该有更多模块,并且尝试在其他游戏中使用它会返回相同的 5 个模块。
我找到了同一问题的一些答案,但它们都不适合我:
第一个不起作用,因为我无法使用 TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32 作为方法中的标志。
第二个不起作用,因为当我尝试调用 Psapi.INSTANCE.EnumProcessModulesEx(...) 时,我无法调用方法 EnumProcessModulesEx()
这是我的代码片段:
public static int getModuleBaseAddress(int process_id) {
DWORD pid = new DWORD(process_id);
HANDLE snapshot = null;
snapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPMODULE, pid);
MODULEENTRY32W module = new MODULEENTRY32W();
while(Kernel32.INSTANCE.Module32NextW(snapshot, module)) {
String s = Native.toString(module.szModule);
Pointer x = module.modBaseAddr;
System.out.println(s);
System.out.println(x);
System.out.println("---");
}
return 0;
}
请注意,使用 Tlhelp32.TH32CS_SNAPMODULE32 不会返回任何内容,并且 Tlhelp32.TH32CS_SNAPALL 返回与 lhelp32.TH32CS_SNAPMODULE 相同的结果
一只甜甜圈
相关分类