You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DLL中用E8指令调用逆向分析得到的EXE函数?

问题:DLL劫持调用EXE指定地址函数并生成E8直接调用指令

我逆向分析了一个Windows x86架构的.exe文件,目前仅持有该.exe文件,已获取部分函数信息。我的目标是通过DLL劫持技术创建一个与目标.exe同进程的DLL,调用.exe中地址为0x401000的函数foo。

我希望用C/C++编写代码,让DLL生成的汇编代码使用0xE8指令(即直接call 0x401000,且重定位后相对调用地址正确)。但目前尝试的方法都无法达到预期:

  • 定义const函数指针,生成的汇编是两步调用逻辑,比如call dword ptr [指针变量]或者mov ecx, 0x401000; call ecx,不是直接的E8指令调用。
  • 尝试内嵌汇编__asm {call foo},生成的机器码是FF 15 00 00 00 00,同样不是E8指令。

已知信息:目标.exe的镜像基址为0x400000,DLL的虚拟内存地址在编译时无法确定,按照PE格式的理论,应该可以通过重定位表实现E8指令的正确相对调用。

我的疑问是:是否需要基于该.exe生成自定义的.obj或.lib文件?已知.lib需要函数导出信息,但目标.exe并没有导出表。

示例代码如下:

// 编译后对应汇编输出可参考相关结果
void (* const foo)(int b, int c) = (void (* const)(int b, int c)) 0x401000;

#pragma optimize("",off)
int bar(int a, int b) {
    return a * b;
}
#pragma optimize("",on)

int main(int argc, char**argv) {
    int ba = bar(100, 200);
    foo(100, ba);
    return 0;
}

内容的提问来源于stack exchange,提问作者Edward Gynt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:48:15