我正在使用gdb來檢查程序。在裝配中,代碼是這樣做的:x86 cmp操作碼,指針和內聯文字
cmp $0x5, %eax
然而,當我檢查的%eax
內容,我得到:\020\343\377\377\377\177
當作爲字符串檢查。
\020\343\377\377\377\177
與彙編中的$ 0x5相比如何?
我正在使用gdb來檢查程序。在裝配中,代碼是這樣做的:x86 cmp操作碼,指針和內聯文字
cmp $0x5, %eax
然而,當我檢查的%eax
內容,我得到:\020\343\377\377\377\177
當作爲字符串檢查。
\020\343\377\377\377\177
與彙編中的$ 0x5相比如何?
cmp
,在這種情況下,將eax
中的值與常數5
進行比較。如果你認爲它實際上是一個指針,那麼eax
指向的值不會與常數進行比較。
該比較由減法完成 - 在你的情況下,這意味着5
從值在eax
減去,和多個標誌(CF,OF,SF,ZF,AF,和PF,根據documentation)被設置適當。通常,cmp
指令之後是某種類型的條件指令(通常是跳轉),根據比較結果執行不同的操作。
如果您告訴我們eax
中的值,而不是將eax
作爲指針進行解釋,那麼我可能會向您提供更多信息。您可以使用p $eax
或info registers
獲取gdb中的值eax
。
你是什麼意思「%eax的內容」?作爲字符串檢查? C寄存器不能包含任何有意義的字符串。 –
這是一個非常寬泛的eax你到達那裏。 –
通過調用如下所示的方式對其進行檢查:x/30s $ eax – darksky