2010-02-15 21 views
3

我对编程确实很陌生(通常 - 这很可悲),而且一些与Python相关的程序集已经出现在这个应用程序中,我正在黑客运行在64位上。在x86_64上使用程序集JMP功能

从本质上讲,代码是这样的:

#define FUNCTION(name)  \ 
    .globl _##name;    \ 
    _##name:     \ 
    jmp *(_p_##name) 

.text 
    FUNCTION(name) 

的功能(名称)的语法使用约50倍来定义标头外部Python库,据我可以告诉(我不会假装我完全理解它,我只是bugfixing)。

由于我对编译x86_64的,下面的错误是由GCC为每个函数(名称)实例吐出:

32位绝对寻址不支持x86-64的

不能做签名4字节重定位

我该如何解决这个问题以便在x86_64上运行?

回答

2

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

相关问题