0

我在视频游戏中使用 DLL 注入来进行改装(我正在构建游戏 API)。

我想从我的新 DLL 中直接访问 EXE 中的结构和变量。变量的绝对地址是已知的(EXE 具有固定的映像库)。

根据 GNUld文档,我可以使用--defsym=symbol=expression在输出文件中创建一个全局符号,其中包含由表达式给出的绝对地址。

我无法让它工作。

如果我extern在代码中声明符号并使用ld --defsym,我会得到未定义的引用错误。但是,如果我在代码中定义符号,它只会使用本地(DLL)版本,而不是 EXE 版本。

似乎这些--defsym选项没有效果。任何见解将不胜感激。

更新:--defsym在 Linux 下完美运行。当我尝试在 Windows 上使用 mingw 进行编译时,undefined reference出现错误。

4

1 回答 1

1

我已经弄清楚了问题所在。

检查生成的程序集后mingw,我发现 C 符号名称带有下划线前缀。这发生在 Windows 上,但不在 Linux 上。

有一个gcc选项-fno-leading-underscore,但这会导致对 的未定义引用WinMain

只需在符号名称中添加前导下划线即可。

示例:如果我的符号alien在 C 中命名,则使用gcc --defsym=_alien=0x500000效果很好。

于 2013-08-18T19:51:01.027 回答