我对编程真的很陌生(总的来说 - 这是可悲的),并且一些与 Python 相关的程序集突然出现在这个应用程序中,我正在破解它以在 64 位上运行。
本质上,代码是这样的:
#define FUNCTION(name) \
.globl _##name; \
_##name: \
jmp *(_p_##name)
.text
FUNCTION(name)
据我所知,FUNCTION(name) 语法大约被使用了 50 次来定义外部 Python 库的 header (我不会假装我完全理解它,我只是在修复错误)。
由于我正在针对 x86_64 进行编译,因此 GCC 对于每个 FUNCTION(name) 实例都会发出以下错误:
32-bit absolute addressing is not supported for x86-64
cannot do signed 4 byte relocation
我该如何“修复”它以在 x86_64 上运行?
最佳答案
获取 Intel Architecture Software Developer's Manuals 的副本。正如您所看到的,某些形式的 jmp
指令在 64 位模式下无效。特别是,两种“跳转远,绝对,操作数中给出的地址”形式将不起作用。您将需要更改为指令的相对寻址或绝对间接寻址形式。我的手册中的第 2A 卷第 3-549 页包含大量有关 jmp
的信息。
关于gcc - 在 x86_64 上使用汇编 JMP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2267785/