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

时间:2016-06-13 14:44:19

标签: c++ windows aslr

我需要获取.exe的基地址,每次启动时都会有一个随机基地址。我试过这个,但它似乎没有效果:

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

有什么问题?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

  

我需要获取.exe的基址/入口点地址,每次启动时都有一个随机基址。该计划使用ASLR。

     

...

     

我将用它来编辑正确过程中的某些内存块

为了将数据写入另一个进程,您需要使用WriteProcessMemory(),这需要您为正在写入的进程打开HANDLE

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

请参阅Process EnumerationEnumerating All Processes

您无需确定正在写入的进程的基址。让系统为您跟踪该信息。您所需要的只是对流程的开放HANDLE