我第一次學習Assembly Lang。這裏是(gdb)反彙編的一部分:
mov $0x131,%eax
cmp 0x8(%rsp),%eax //Question here, what is the value of 0x8(%rsp)?
(gdb)i r
rax 0x131 305
rbx 0x7fffffffe578 140737488348536
rcx 0x20 32
rdx 0x7fffffffe478 140737488348280
rsi 0x0 0
rdi 0x1999999999999999 1844674407370955161
rbp 0x0 0x0
rsp 0x7fffffffe470 0x7fffffffe470
r8 0x37ed3bb080 240203313280
r9 0x0 0
r10 0x1e 30
r11 0x0 0
r12 0x400cb0 4197552
r13 0x7fffffffe570 140737488348528
r14 0x0 0
r15 0x0 0
rip 0x400fd9 0x400fd9 <phase_3+129>
eflags 0x212 [ AF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
我很難搞清楚它比較什麼。 0x8(%rsp)
的值是多少?
(我知道這個問題聽起來愚蠢)
在此先感謝
= - ==========
最後我通過
(gdb) p /x *(int *)($rsp+0x8)
解決
在這篇文章的幫助下How to print -0x4(%rbp) in gdb?
Zack的答案應該是鑽機HT,但它不工作,因爲我使用的是64位操作系統。
謝謝,你知道如何在gdb中顯示該值嗎? –
對於我的64位操作系統,(gdb)p/x *(int *)($ rsp + 0x8)適用於我。 x/1dw 0x8(%esp)將在64位操作系統中導致語法錯誤。無論如何,你的回答非常有幫助,非常感謝。 –