簡體   English   中英

C ++從指針獲取地址

[英]C++ Get an address off of a pointer

我試圖理解C ++在內存中讀/寫的方式。 我所擁有的是,我正試圖從指針中獲取一個地址。 我有指針指向我想要的地址。 就像我有我想要用來讀取值的當前地址一樣,假設地址是14C9862但是每次我再次運行程序時這個地址都會改變。 我有寫入此地址的指針(我正在使用作弊引擎)並且它表示指針等於eax + ePSXE.exe + A82020,eax = 77420ePSXE.exe = 1718 (忽略零),所以我怎么能用C ++寫這個,每次我再次運行程序時都可以得到ADDRESS。

當前代碼:

int readTest {}       
ReadProcessMemory(handle, (LPBYTE*)ePSXe+pointer?, &readTest, sizeof(readTest), 0);
        std::cout << readTest << std::endl;

正如我現在想的那樣,LPBYTE是指向一個字節的指針所以不能像(A82020*)???? 我只是瘋了,我不知道怎么做。

如果您知道ePSXE.exe模塊的基址,則看起來可以計算目標地址。

您可以使用以下代碼獲取它:

#include <windows.h>
#include <TlHelp32.h> 

DWORD procId = 0;   // <-- Replace with real process ID
MODULEENTRY32 lpModuleEntry = {0};
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, procId);
if(!hSnapShot)
{
  return NULL;
}

DWORD baseAddress = 0;
lpModuleEntry.dwSize = sizeof(lpModuleEntry);
BOOL bModule = Module32First( hSnapShot, &lpModuleEntry );
while(bModule)
{
  if(!strcmp( lpModuleEntry.szModule, "ePSXE.exe") )
  {
    CloseHandle( hSnapShot );
    baseAddress = reinterpret_cast<DWORD>(lpModuleEntry.modBaseAddr);
  }
  bModule = Module32Next( hSnapShot, &lpModuleEntry );
}
CloseHandle( hSnapShot );

最后,您需要將地址的靜態部分與模塊基址相結合:

ReadProcessMemory(handle, reinterpret_cast<LPVOID>(baseAddress + 0xA82020), &readTest, sizeof(readTest), NULL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM