繁体   English   中英

在x86_64上使用程序集JMP功能

[英]Using assembly JMP function on x86_64

我真的很喜欢编程(一般来说 - 这很可怜)而且这个应用程序中出现了一些与Python相关的程序集,我正在攻击64位运行。

本质上,代码是这样的:

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

.text
  FUNCTION(name)

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

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

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

不能做签名的4字节重定位

我如何“修复”这个在x86_64上运行?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM