Java получает базовый адрес программы - PullRequest
2 голосов
/ 02 апреля 2019

Итак, я хочу получить базовый адрес программы.

Я пытался использовать идентификатор процесса и указатели (jna), чтобы получить его, но он всегда возвращает мне 0.

Вот как это выглядит

  public static void main(String[] args) {
    enableDebugPrivilege(); 

    int pID = getProcessId(gameWindowName);
    System.out.println("Pid = " + pID); 

    int base = findBaseAddress(pID); 

    System.out.println("Base Address: " + Integer.toHexString((int) base));
    HANDLE game = openProcess(WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ, pID);

}

private static int findBaseAddress(int pID) {
    try {
        HANDLE game = openProcess(WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ, pID);
        List<Module> modules = PsapiTools.getInstance().EnumProcessModulesEx(game, 0x01);
        for (Module module : modules) {

            if (module.getBaseName().equals(gameExe)) {
                if (module.getLpBaseOfDll() != null) {
                    int baseAddress = ((Long) Pointer.nativeValue(module.getLpBaseOfDll().getPointer())).intValue();
                    return baseAddress;
                }
            }
        }
    } catch (Exception e) {
        System.out.println("Error finding base address");
        return -1;
    }
    return 0;
}
...