Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 在x86_64上使用汇编JMP函数_Gcc_Assembly_X86 64 - Fatal编程技术网

Gcc 在x86_64上使用汇编JMP函数

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次(

我对编程真的很陌生(一般来说,这很可怜),在这个应用程序中出现了一些与Python相关的程序集,我正在尝试在64位上运行

基本上,代码是这样的:

#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
的信息