gpt4 book ai didi

gcc - 32 位 GCC C 程序中的内联 64 位汇编

转载 作者:行者123 更新时间:2023-12-05 09:21:05 24 4
gpt4 key购买 nike

我正在编译 32 位二进制文​​件,但想在其中嵌入一些 64 位程序集。

void method() {
asm("...64 bit assembly...");
}

当然,当我编译时,我会收到有关引用错误寄存器的错误,因为这些寄存器是 64 位的。

evil.c:92: Error: bad register name `%rax'

是否可以添加一些注释,以便 gcc 将使用 64 位汇编器来处理 asm 部分。我有一个单独编译的解决方法,在页面中映射 PROT_EXEC|PROT_WRITE 并复制我的代码,但这非常尴尬。

最佳答案

不,这是不可能的。您不能从 32 位二进制文​​件运行 64 位程序集,因为处理器不在 long mode 中。在运行您的程序时。

将 64 位代码复制到可执行页面将导致该代码被错误解释为 32 位代码,这将产生不可预知的不良结果。

关于gcc - 32 位 GCC C 程序中的内联 64 位汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34467092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com