亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JNA - CreateToolhelp32Snapshot 未返回所有 DLL

JNA - CreateToolhelp32Snapshot 未返回所有 DLL

交互式愛情 2024-01-05 16:22:55
我正在嘗試從我可以處理的進程中獲取模塊的基地址。我已經使用 CreateToolhelp32Snapshot 和 EnumProcessModules 方法嘗試過此操作。問題是這兩種方法都只返回這 5 個 DLL:underrail.exe ndll.dll wow64.dll wow64win.dll wow64cpu.dll我知道應該有更多模塊,并且嘗試在其他游戲中使用它會返回相同的 5 個模塊。我找到了同一問題的一些答案,但它們都不適合我:https://www.unknowncheats.me/forum/counterstrike-global-offensive/169030-modules.htmlJNA - EnumProcessModules() 未返回所有 DLL?第一個不起作用,因為我無法使用 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 相同的結果
查看完整描述

1 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

目前,方法 EnumProcessModulesEx 未映射到 JNA,因此您必須制作自己的 Psapi 自定義版本,在我的例子中,它看起來像這樣:


import com.sun.jna.Native;

import com.sun.jna.platform.win32.Psapi;

import com.sun.jna.platform.win32.WinDef.HMODULE;

import com.sun.jna.platform.win32.WinNT.HANDLE;

import com.sun.jna.ptr.IntByReference;

import com.sun.jna.win32.W32APIOptions;


public interface CustomPsapi extends Psapi{


    Psapi INSTANCE = Native.load("psapi", Psapi.class, 

    W32APIOptions.DEFAULT_OPTIONS);


    public void EnumProcessModulesEx(HANDLE hProcess, HMODULE[] lphModule, int cb, 

    IntByReference lpcbNeeded, int dwFilterFlag);



}

然后您可以加載自定義類并使用您映射的方法。


public static CustomPsapi c_psapi = Native.load("psapi", CustomPsapi.class);

為了讓所有 DLL 正確顯示,您需要使用現在映射的 EnumProcessModulesEx 方法,并將所有模塊的標志作為最后一個參數 (0x03),因此該方法應如下所示:


c_psapi.EnumProcessModulesEx(process, modules, 1024, new IntByReference(1024), 0x03);



查看完整回答
反對 回復 2024-01-05
  • 1 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號