[英]How do I get the base address of another process? (ASLR)
我需要獲取一個.exe的基地址,該.exe每次啟動時都有一個隨機基地址。 我已經嘗試過了,但是似乎沒有用:
int Base = (DWORD)GetModuleHandle("Test.exe");
怎么了?
看來您正在嘗試獲取另一個進程的基址。 可悲的是, GetModuleHandle
僅適用於當前進程中的模塊。 為了實現您的目標,您需要使用PSAPI或CreateToolhelp32Snapshot
提取另一個進程的模塊列表。 基址在列表中。
我需要獲取.exe的基地址/入口點地址,該文件每次啟動時都有一個隨機基地址。 該程序使用ASLR。
...
我將使用它來編輯正確過程中的某些內存塊
為了將數據寫入另一個進程,您需要使用WriteProcessMemory()
,這要求您為要寫入的進程打開一個HANDLE
。
您可以使用OpenProcess()
獲得該HANDLE
,請求PROCESS_VM_OPERATION
和PROCESS_VM_WRITE
權限。 OpenProcess()
接受一個進程ID作為輸入,您可以從以下地址獲取:
CreateToolhelp32Snapshot()
/ Process32First()
/ Process32Next()
EnumProcesses()
。 WTSEnumerateProcesses()
您根本不需要確定要寫入的進程的基址。 讓系統為您跟蹤該信息。 您只需要打開該過程的HANDLE
即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.