在x86_64上使用程序集JMP功能

时间:2010-02-15 17:40:39

标签: gcc assembly x86-64

我真的很喜欢编程(一般来说 - 这很可怜)而且这个应用程序中出现了一些与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上运行?

1 个答案:

答案 0 :(得分:2)

抓取Intel Architecture Software Developer's Manuals的副本。正如您所看到的,jmp指令的某些形式在64位模式下无效。特别是,两个“跳远,绝对,操作数给出的地址”形式将不起作用。您需要更改为指令的相对寻址或绝对间接寻址形式。我手册中的第2A卷第3-549页有关于jmp的大量信息。