Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;从指针中获取地址 我试图理解C++在内存中的读写方式。 我所拥有的是,我正试图从指针上得到一个地址。我有一个指向我想要的地址的指针。 就像我有我想要用来读取值的当前地址一样,假设地址是14C9862,但是每次我再次运行程序时,这个地址都会改变。我有一个指向这个地址的指针(我正在使用作弊引擎),它说指针等于eax+ePSXE.exe+A82020,而eax=77420和ePSXE.exe=1718(忽略零),所以我如何在C++中写这个方法,这样我每次运行程序时都能得到地址。 < /p>_C++_Memory - Fatal编程技术网

C++;从指针中获取地址 我试图理解C++在内存中的读写方式。 我所拥有的是,我正试图从指针上得到一个地址。我有一个指向我想要的地址的指针。 就像我有我想要用来读取值的当前地址一样,假设地址是14C9862,但是每次我再次运行程序时,这个地址都会改变。我有一个指向这个地址的指针(我正在使用作弊引擎),它说指针等于eax+ePSXE.exe+A82020,而eax=77420和ePSXE.exe=1718(忽略零),所以我如何在C++中写这个方法,这样我每次运行程序时都能得到地址。 < /p>

C++;从指针中获取地址 我试图理解C++在内存中的读写方式。 我所拥有的是,我正试图从指针上得到一个地址。我有一个指向我想要的地址的指针。 就像我有我想要用来读取值的当前地址一样,假设地址是14C9862,但是每次我再次运行程序时,这个地址都会改变。我有一个指向这个地址的指针(我正在使用作弊引擎),它说指针等于eax+ePSXE.exe+A82020,而eax=77420和ePSXE.exe=1718(忽略零),所以我如何在C++中写这个方法,这样我每次运行程序时都能得到地址。 < /p>,c++,memory,C++,Memory,当前代码: int readTest {} ReadProcessMemory(handle, (LPBYTE*)ePSXe+pointer?, &readTest, sizeof(readTest), 0); std::cout << readTest << std::endl; int readTest{} ReadProcessMemory(handle,(LPBYTE*)ePSXe+指针?,&readTest,sizeof(

当前代码:

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

std::cout如果您知道
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 );
#包括
#包括

DWORD procId=0;//lpModuleEntry.szModule不应该是常量字符而不是WCHAR吗?视觉给了我一个印象error@MatthewSouza实际上,它是
TCHAR
,当您的项目配置为Unicode字符集时,它就是
wchar\t
。上面的代码没有经过测试,它应该给你一个如何处理地址的想法。谢谢你的回答确实是正确的,它工作了!但如果没有EAX值,它会给出另一个地址的随机数。你写的东西我一半都不知道,但我要好好学习。谢谢你的回复!
ReadProcessMemory(handle, reinterpret_cast<LPVOID>(baseAddress + 0xA82020), &readTest, sizeof(readTest), NULL);