[英]understanding assembly code for binary bomb phase 2
我正在研究二進制炸彈項目。 我正在處理此代碼,並且正在嘗試理解部分匯編代碼。 所以我很容易通過階段1,而對於階段2,我需要輸入4個字符。
例如: phase-2: xyzd
在下面的示例中,我使用了輸入: abcd作為我的四個字符
當我在 gdp 中運行它並檢查匯編代碼時,我得到以下信息:
Dump of assembler code for function phase2:
0x080487d6 <+0>: push %ebp
0x080487d7 <+1>: mov %esp,%ebp
0x080487d9 <+3>: sub $0xc,%esp
=> 0x080487dc <+6>: mov 0x8(%ebp),%ecx
0x080487df <+9>: mov 0xc(%ebp),%edx
0x080487e2 <+12>: mov 0x10(%ebp),%eax
0x080487e5 <+15>: mov %cl,-0x4(%ebp)
0x080487e8 <+18>: mov %dl,-0x8(%ebp)
0x080487eb <+21>: mov %al,-0xc(%ebp)
0x080487ee <+24>: cmpb $0x77,-0x4(%ebp)
0x080487f2 <+28>: jne 0x8048807 <phase2+49>
0x080487f4 <+30>: cmpb $0x62,-0x8(%ebp)
0x080487f8 <+34>: jne 0x8048807 <phase2+49>
0x080487fa <+36>: cmpb $0x79,-0xc(%ebp)
0x080487fe <+40>: jne 0x8048807 <phase2+49>
0x08048800 <+42>: mov $0x1,%eax
0x08048805 <+47>: jmp 0x804880c <phase2+54>
0x08048807 <+49>: mov $0x0,%eax
0x0804880c <+54>: leave
0x0804880d <+55>: ret
End of assembler dump.
我真正要明白的是
0x080487ee <+24>: cmpb $0x77,-0x4(%ebp)
這里發生了什么? 我認為它將 $0x77 的值與 ebp 中的值進行比較。 那有意義嗎? 我什么時候知道 ebp 中存儲了什么?
我運行代碼直到上面一行,然后 ebp 和我得到以下信息:
ebp 0xbffff6e8 0xbffff6e8
總而言之,我想知道比較行到底在做什么,這樣我才能更好地理解代碼。 以及如何在不進入休假狀態的情況下找出 ebp 中的值。
%ebp
通常用作堆棧幀指針——- -0x4
是存儲在%ebp
的地址的偏移量——下面的值(負偏移量) %ebp
通常是局部變量(如果從 C 代碼編譯)和上面的值(正偏移)通常是函數參數。 此代碼似乎是通過編譯 C 代碼生成的代碼,並且%ebp
用法是典型的。 -0x4(%ebp)
將引用函數的第一個局部變量。 它似乎已經在mov %cl,-0x4(%ebp)
之前設置了一些語句。 這就提出了%cl
值來自哪里的問題,如果我們進一步追溯,我們可以看到它是mov 0x8(%ebp),%cx
設置了%cl
。 注意cmpb
指令有一個b
前綴,這意味着它是一個字節比較。 (與 16 位或 32 位比較相反。)這與僅使用%cl
設置的值相匹配,這也是一個 8 位值。
所有這些都告訴我們,您所詢問的行正在與十六進制值 0x77 進行 8 位比較。 如果您查看 ASCII 表,您可以看到 0x77 是小寫的“w”。 如果字節不等於該值,則下一條指令將跳轉。 這讓我得出結論,我們正在檢查傳遞給函數的第一個參數,看它是否是“w”字符。
據我所知,這個炸彈的東西通常是給學生的。 我有一種感覺,您缺少應該已經學習的基本知識。 你應該重新審視你擁有的任何課程材料。
無論如何,一些快速提示:
x(%ebp)
是間接尋址,它訪問地址為x+%ebp
內存%ebp
開始的第+1
行之后的堆棧內容: saved ebp
、 return address
、 arg1
、 arg2
、 arg3
+6
行將8(%ebp)
(這是第一個參數)加載到%ecx
。+15
行將其低 8 位保存到-4(%ebp)
處的局部變量中。+24
行將此值與0x77
進行比較。 請注意,您聲稱需要 4 個數字。 雖然這可能在調用者是真實的,這個phase2
只使用3個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.