我正在做家庭作業。我們得到一個預編譯的二進制文件,我們必須使用gdb
來獲取程序集轉儲,遍歷數據結構,查看存儲在內存中的值等,以便弄清楚二進制文件的功能。下面是一個函數調用反彙編轉儲幾行:GDB/GNU程序集:測試%esi,%esi返回不等於?
0x08048e14 <+21>: test %esi,%esi
0x08048e16 <+23>: jne 0x8048e4b <fun6+76>
0x08048e18 <+25>: jmp 0x8048e5d <fun6+94>
我認爲test %esi,%esi
總是返回「等於」結果(或者更確切地說,等效語句中使用的寄存器標誌,我相信表達僅設置了ZF
?),並且jne
指令永遠不會執行,而是程序將執行行<+25>
處的指令。但是,在逐步完成這些指令之後,程序跳轉到<+76>
行!爲什麼會發生?我很困惑。
在情況下,它有助於解釋的答案,這裏是在行<+21>
的test
指令後的寄存器標誌(ZF
沒有設置?)(我仍然不知道如何解釋標誌):
eflags 0x202 [ IF ]
SO會自動爲其自己的鏈接插入問題標題。 – rici
@rici非常感謝你指出了這一點:)然而,在我發佈這個答案後,它顯示「在這裏輸入鏈接描述」XD,這讓我很困惑.. – starrify
starrify:有一些奇怪的更新問題。如果您看起來像是以前的版本,或者您錯過了剛輸入的評論等,請重新加載頁面,通常會獲得最新版本。 – rici