[英]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.