【C++】 找到是基址DLL+ offset 時怎麼處理

在CE找到這個地址
要怎麼在C++去抓取這個值

img

img

用GetModuleHandleEx去抓不會與底下這個值相等

img

該怎麼解決這個問題QQ

1.dll的基地址每次运行不一定一样
2.这段内存可能不允许读取,先改变一下属性
3.GetModuleHandle好像只能找到具有静态地址的DLL
4.使用ReadProcessMemory 尝试

BOOL ReadProcessMemory(
HANDLE hProcess, // 被读取进程的句柄;
LPCVOID lpBaseAddress, // 读的起始地址;
LPVOID lpBuffer, // 存放读取数据缓冲区;
DWORD nSize, // 一次读取的字节数;
LPDWORD lpNumberOfBytesRead // 实际读取的字节数;
);
ReadProcessMemory(dwProcessId, (LPVOID)数据地址, szPassBuff, sizeof(szPassBuff), 0);

5.在exe文件中是得不到dll的地址的,如果是打开了进程,可以用EnumProcessModules获取进程加载的所有DLL的地址,然后再用GetModuleFileNameEx逐一获取每个DLL的名称来比较。
6.使用GetModuleHandle()返回的值。是的,它会返回HANDLE,但您可以将其转换为适当的指针类型。与Visual Studio的“模块”窗口中的模块地址范围进行比较,您会看到它与该范围的起始值相同。
更好的方法是使用GetModuleInformation()。您传递的MODULEINFO结构的第一个字段将包含DLL的基地址。
根据MODULEINFO的文档虽然:
一个模块的加载地址是一样的HMODULE值。
所以我想只是使用HMODULE和铸造是好的。无论你想做什么,我想。
如果要获取远程进程的信息,请使用EnumProcessModules()。