我需要获取.exe的基地址,每次启动时都会有一个随机基地址。我试过这个,但它似乎没有效果:
int Base = (DWORD)GetModuleHandle("Test.exe");
有什么问题?
答案 0 :(得分:2)
您似乎正在尝试获取另一个进程的基址。遗憾的是,GetModuleHandle
仅适用于当前流程中的模块。要实现您的目标,您需要使用PSAPI或CreateToolhelp32Snapshot
来提取另一个进程的模块列表。基地址在列表中。
答案 1 :(得分:1)
我需要获取.exe的基址/入口点地址,每次启动时都有一个随机基址。该计划使用ASLR。
...
我将用它来编辑正确过程中的某些内存块
为了将数据写入另一个进程,您需要使用WriteProcessMemory()
,这需要您为正在写入的进程打开HANDLE
。
您使用OpenProcess()
获得HANDLE
,请求PROCESS_VM_OPERATION
和PROCESS_VM_WRITE
权限。 OpenProcess()
将进程ID作为输入,您可以从中获取:
CreateToolhelp32Snapshot()
/ Process32First()
/ Process32Next()
EnumProcesses()
。WTSEnumerateProcesses()
请参阅Process Enumeration和Enumerating All Processes。
您无需确定正在写入的进程的基址。让系统为您跟踪该信息。您所需要的只是对流程的开放HANDLE
。