DLL注入和通过偏移读取内存

时间:2016-02-10 20:33:40

标签: c++ memory dll

我向exe注入了一个DLL。现在我需要读取特定偏移量的数据。我的DLL代码:

DWORD ExeBaseAddress = (DWORD)GetModuleHandleA(0); 
// HANDLE baseAddr = GetModuleHandleA(0)

uint16_t value = ExeBaseAddress + 0x7198BC + 0x70e;

cout << value << endl;

问题是它没有给我我期望的值1000。它也没有给我正确的地址。

使用内存阅读软件,我可以获得 CORRECT 值。参见:

cheatengine

但即使我使用与内存读取应用程序完全相同的偏移量,我仍然从代码中得到错误的值。那我错过了什么?

我试过了,但它仍然给了我错误的价值。

HANDLE ExeBaseAddress = GetModuleHandleA(0);

uintptr_t p = (uintptr_t)ExeBaseAddress + 0x7198BC + 0x70e;
int value = *reinterpret_cast<int *>(p);

cout << ExeBaseAddress << " - " << value << endl;

1 个答案:

答案 0 :(得分:3)

通过OP的所有长篇评论和聊天(一些基本输入),解决方案找到了方向,

加载的exe将另一个PE的基地址存储在0x7198BC位置。此基址+偏移量(0x70E)包含所需的值。

@media only screen and (max-width: 991px) {

    .a-checkpoint-list > ul {
        margin-left: 15%;
    }

    .a-checkpoint-list > ul li {
        padding-left: 10%;
    }
}