簡體   English   中英

錯誤指令 - C 代碼中的內聯匯編語言

[英]Bad Instruction - Inline Assembly Language in C Code

我試圖用匯編指令退出程序,但是當我用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為 64 位。 此外,您的操作順序不正確。

編譯如下:

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

請注意,對於任何其他系統調用(不會終止整個程序),有必要告訴編譯器哪些寄存器被破壞,並且通常使用"memory"破壞器來確保內存與 C 值同步系統調用讀取或寫入內存。

此外,要傳遞操作數,您需要擴展 asm 語法。 請參閱如何在內聯匯編中通過 sysenter 調用系統調用? 例如my_write包裝器。 (在 asm 模板中只有"syscall" ;我們要求編譯器將調用號和 args 放在正確的寄存器中,而不是編寫mov

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM