1
__asm__("\n\
movl $1, %eax\n\
");
如何步進__asm__
以便我可以打印寄存器以查看它們正在存儲的內容?現在,我打破了__asm__
一行,然後我嘗試按stepi
或si
,它並沒有進入movl
行。我究竟做錯了什麼?使用GNU調試器,我怎樣才能通過__asm__語句?
__asm__("\n\
movl $1, %eax\n\
");
如何步進__asm__
以便我可以打印寄存器以查看它們正在存儲的內容?現在,我打破了__asm__
一行,然後我嘗試按stepi
或si
,它並沒有進入movl
行。我究竟做錯了什麼?使用GNU調試器,我怎樣才能通過__asm__語句?
的si
是跨過的movl
指令(您可以通過鍵入display/i $pc
,觀察如何輸出的變化來驗證。
什麼沒有發生(可能混淆你什麼)是更新源這是因爲asm()中的代碼沒有任何行號註釋,因此GDB無法確定它應該顯示哪條線。
通常,編譯器會將這些註釋放入程序集但是這裏你繞過了編譯器,如果你想要行號是正確的,你必須自己添加這些註釋(通常不值得麻煩)。
'$ pc'是什麼?程序計數器? – Strawberry 2011-04-07 04:33:40
是的,$ pc是程序計數器,x86_64上的$ rip的值。 輸入'layout regs'有助於以可視化的方式進行操作, - tui視圖。 – rurban 2016-03-25 18:38:38