如何获取另一个进程的基地址? (ASLR)

How do I get the base address of another process? (ASLR)

我需要获取 .exe 的基地址,它在每次启动时都有一个随机基地址。我已经试过了,但它似乎不起作用:

int Base = (DWORD)GetModuleHandle("Test.exe");

怎么了?

您似乎正在尝试获取另一个进程的基地址。遗憾的是,GetModuleHandle 仅适用于当前进程中的模块。为了实现你的目标,你需要使用 PSAPIs 或者 CreateToolhelp32Snapshot 来提取另一个进程的模块列表。基地址在列表中。

I need to get the base address/entry point address of a .exe which has a random base address everytime its started. The program uses ASLR.

...

I will use it to edit certain chunks of memory inside the correct process

为了向另一个进程写入数据,你需要使用WriteProcessMemory(),这需要你打开一个HANDLE到被写入的进程。

您使用 OpenProcess() 获得 HANDLE,请求 PROCESS_VM_OPERATIONPROCESS_VM_WRITE 权限。 OpenProcess() 将进程 ID 作为输入,您可以从中获取:

参见 Process Enumeration and Enumerating All Processes

您在任何时候都不需要确定正在写入的进程的基地址。让系统为您跟踪该信息。您只需要打开 HANDLE 流程即可。