我真的很喜欢编程(一般来说 - 这很可怜)而且这个应用程序中出现了一些与Python相关的程序集,我正在攻击64位运行。
基本上,代码是这样的:
#define FUNCTION(name) \
.globl _##name; \
_##name: \
jmp *(_p_##name)
.text
FUNCTION(name)
FUNCTION(name)语法大约用50次来定义外部Python库的标题,据我所知(我不会假装我完全理解它,我只是在修复错误)。< / p>
由于我正在编译x86_64,因此GCC会为每个FUNCTION(名称)实例吐出以下错误:
x86-64
不支持32位绝对寻址不能做有符号的4字节重定位
我如何“修复”这个在x86_64上运行?
答案 0 :(得分:2)
抓取Intel Architecture Software Developer's Manuals的副本。正如您所看到的,jmp
指令的某些形式在64位模式下无效。特别是,两个“跳远,绝对,操作数给出的地址”形式将不起作用。您需要更改为指令的相对寻址或绝对间接寻址形式。我手册中的第2A卷第3-549页有关于jmp
的大量信息。