3

我对编程真的很陌生(总的来说 - 这很可悲),并且在这个应用程序中出现了一些与 Python 相关的程序集,我正在破解它以在 64 位上运行。

本质上,代码是这样的:

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

.text
  FUNCTION(name)

据我所知,FUNCTION(name) 语法被使用了大约 50 次来定义外部 Python 库的标头(我不会假装我完全理解它,我只是在修复错误)。

由于我正在为 x86_64 进行编译,因此 GCC 会为每个 FUNCTION(name) 实例吐出以下错误:

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

不能做有符号的 4 字节重定位

我将如何“修复”它以在 x86_64 上运行?

4

1 回答 1

2

获取一份英特尔架构软件开发人员手册。如您所见,某些形式的jmp指令在 64 位模式下无效。特别是,这两种“跳远,绝对,操作数中给出的地址”形式将不起作用。您将需要更改为指令的相对寻址或绝对间接寻址形式。在我的副本中,第 2A 卷第 3-549 页有大量关于jmp.

于 2010-02-15T17:48:29.363 回答