RE - IDA 查找函数偏移量

Den*_*ger 2 c++ reverse-engineering ida memory-address dll-injection

我刚刚开始进行逆向工程。

我创建了一个小型 C++ ConsoleApplication,并尝试通过注入的 DLL 调用 NewFunction。

void NewFunction()
{
    DWORD dwImageBase = (DWORD)GetModuleHandle(NULL);

    std::cout << "ImageBase: " << ToHex(dwImageBase) << std::endl;
    std::cout << "NewFunction: " << ToHex((DWORD)&NewFunction) << std::endl;
    std::cout << "Offset: " << ToHex((DWORD)&NewFunction - dwImageBase) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

ImageBase: F90000
NewFunction: FA111D
Offset: 1111D
Run Code Online (Sandbox Code Playgroud)

现在,当我使用注入的 DLL 调用 0xFA111D 时,它会按预期工作并再次打印。(DLL调用ImageBase + Offset)

但我不知道如何使用 IDA Pro 获取 NewFunction 的地址...

在国际开发协会中:

  • 该函数位于:0x4133F0
  • 图像库是:0x400000
  • 计算出的偏移量为:0x133F0

至少偏移量不应该是相同的吗?我在这里错过了一些重要的东西吗?

Igo*_*sky 5

Visual Studio 中调试构建的默认设置包括启用增量链接。这样做的效果是,在编译的二进制文件中,每个函数调用都通过跳转存根(这使得链接器更容易用新代码更新二进制文件,而无需重做完整的链接步骤)。

&NewFunction返回该存根的地址,而不是实际函数的实现。