我需要获取 .exe 的基地址地址,该地址每次启动时都有一个随机基地址。我试过这个,但它似乎不起作用:
int Base = (DWORD)GetModuleHandle("Test.exe");
怎么了?
您似乎正在尝试获取另一个进程的基地址。可悲的是,GetModuleHandle
仅适用于当前进程中的模块。为了实现您的目标,您需要使用 PSAPI 或CreateToolhelp32Snapshot
提取另一个进程的模块列表。基地址在列表中。
我需要获取 .exe 的基地址/入口点地址,它每次启动时都有一个随机基地址。该程序使用 ASLR。
...
我将使用它来编辑正确进程中的某些内存块
为了将数据写入另一个进程,您需要使用WriteProcessMemory()
,这需要您打开HANDLE
正在写入的进程。
您可以HANDLE
使用OpenProcess()
, requestingPROCESS_VM_OPERATION
和PROCESS_VM_WRITE
permissions 来获得它。OpenProcess()
将进程 ID 作为输入,您可以从中获取:
CreateToolhelp32Snapshot()
// Process32First()
_Process32Next()
EnumProcesses()
.WTSEnumerateProcesses()
您在任何时候都不需要确定正在写入的进程的基地址。让系统为您跟踪该信息。您所需要的只是对HANDLE
过程开放。