2016-08-24 166 views
1

我正在嘗試讀取應該是數字20的進程的地址。我確定此地址位於dll基本偏移+偏移量爲10的數字。我是使用用指針+偏移量C++讀取內存地址

ReadProcessMemory(phandle, (void*)address, &number, sizeof(number), 0); 

讀取特定地址。我的問題是我如何正確搜索位於「57B86F68」+ 10偏移量的地址?

+0

記住,除非你禁用它,否則你可能不得不處理ASLR。 https://en.wikipedia.org/wiki/Address_space_layout_randomization – drescherjm

+0

這有點令人困惑。你正在尋找地址'0x57b86f68 + 10'還是你正在尋找存儲在該位置的地址(或其他類型的值)?無論哪種方式,你都不需要*搜索*任何東西。 – molbdnilo

+0

@drescherjm,我確保通過代碼獲取基地址,因此就我所知,這不是問題。 – Jack

回答

1

您可以從手柄讀取數據,如果你的phandle是PROCESS_VM_READ訪問的進程句柄授予:

ReadProcessMemory(phandle, (void*)(0x57B86F68 + 0x10), &number, sizeof(number), 0); 

要獲取的過程中適當的訪問權限處理檢查OpenProcess標誌,PROCESS_VM_READ應該有。

如果還不行的話事情要複雜得多。您應該翻譯您的virtual address to physical address,然後通過kernel mode直接訪問內存。