gpt4 book ai didi

c - 错误的指令 - C 代码中的内联汇编语言

转载 作者:行者123 更新时间:2023-12-04 14:11:12 26 4
gpt4 key购买 nike

我试图退出一个带有汇编指令的程序,但是当我用gcc编译时它说mov是一个错误的指令,即使我使用 movl 我什至不知道它是什么。甚至可以使用汇编指令退出程序吗?

int main(void)
{
__asm__("movl %rax, $60\n\t"
"movl %rdi, $0\n\t"
"syscall\n");
}
// cc main.c -o main && ./main

最佳答案

64 位需要 movq。此外,您的操作顺序不正确。

以下编译:

int main(void)
{
__asm__("movq $60, %rax\n\t"
"movq $0, %rdi\n\t"
"syscall\n");
}

请注意,对于任何其他系统调用(不会终止整个程序),有必要告诉编译器哪些寄存器被破坏,并且通常使用 “内存” 破坏来进行在系统调用读取或写入内存之前,确保内存与 C 值同步。

此外,要传递操作数,您需要扩展 asm 语法。参见 How to invoke a system call via sysenter in inline assembly?例如 my_write 包装器。 (在 asm 模板中只有 "syscall";我们要求编译器将调用号和参数放在正确的寄存器中,而不是编写 mov)

关于c - 错误的指令 - C 代码中的内联汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64198561/

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