Gcc 在x86_64上使用汇编JMP函数
我对编程真的很陌生(一般来说,这很可怜),在这个应用程序中出现了一些与Python相关的程序集,我正在尝试在64位上运行 基本上,代码是这样的:Gcc 在x86_64上使用汇编JMP函数,gcc,assembly,x86-64,Gcc,Assembly,X86 64,我对编程真的很陌生(一般来说,这很可怜),在这个应用程序中出现了一些与Python相关的程序集,我正在尝试在64位上运行 基本上,代码是这样的: #define FUNCTION(name) \ .globl _##name; \ _##name: \ jmp *(_p_##name) .text FUNCTION(name) 据我所知,函数(名称)语法用于定义外部Python库的头大约有50次(
#define FUNCTION(name) \
.globl _##name; \
_##name: \
jmp *(_p_##name)
.text
FUNCTION(name)
据我所知,函数(名称)语法用于定义外部Python库的头大约有50次(我不会假装完全理解它,我只是在修复错误)
由于我是为x86_64编译的,GCC会为每个函数(名称)实例抛出以下错误:
x86-64不支持32位绝对寻址
无法执行已签名的4字节重定位
我将如何“修复”这个问题以在x86_64上运行?获取一份。正如您所看到的,jmp
指令的某些形式在64位模式下无效。特别是,两种“跳转远、绝对、以操作数形式给出的地址”形式将不起作用。您需要更改为指令的相对寻址或绝对间接寻址形式。本手册第2A卷第3-549页有大量关于jmp
的信息