微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误的指令-C代码中的嵌入式汇编语言

如何解决错误的指令-C代码中的嵌入式汇编语言

我正在尝试退出带有汇编指令的程序,但是当我使用 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

解决方法

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

以下编译:

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。