[英]Translating Assembly to C program
這是我正在查看的匯編代碼:
push %ebp
mov %esp, %epb
sub $0x18, %esp
movl $0x804a170, 0x4(%esp)
mov 0x8(%ebp), %eax
mov %eax, (%esp)
call 0x8048f9b <strings_not_equal>
test %eax, %eax
je 0x8048f78 <phase_1+34>
call 0x8049198 <failed>
leave
ret
目的是為組件的功能提供正確的輸入,以跳轉到功能phase_1+34
。 到目前為止,這就是我要解釋的內容:
前兩行是該功能的設置代碼。 第一行“ sub”行是通過向下移動“%esp”來存儲空間以調用strings_not_equal
函數來分配空間。 我認為傳遞給strings_not_equal
的兩個參數是0x804a170
和輸入值。 我認為<strings_not_equal>
將返回0,如果傳遞的字符串是相等的。 je
然后檢查%eax & %eax
是否為零,只有在%eax = 0
才會發生。 因此,基本上,似乎輸入字符串必須等於0x804a170
。
到目前為止,有人看到任何缺陷嗎?
在這一點上,我被困住了,而我嘗試的卻沒有用。 0x804a170
十進制是134521200.但是這個功能被傳遞給期待字符串 。 那么0x804a170
應該轉換為字符串嗎? 那個字符串應該是什么輸入?
我不知道。 如果有人發現任何缺陷或可以給我指點,我們將不勝感激!
0x804a170
是在運行時被視為“字符串”的對象的指針。 由於您沒有提供有關它的含義的信息,因此我們只能猜測它是第一個字符的指針,后跟更多的字符並以0
結尾,或者它是第一個字符的指針,以及前一個1/2/4 / 8字節將長度描述為整數。
它本身不是字符串。
注釋代碼:
push %ebp ;function name is apparently phase_1
mov %esp, %epb
sub $0x18, %esp ;allocate 24 bytes from stack
movl $0x804a170, 0x4(%esp) ;[esp+4] = pointer to literal, static, or global string
mov 0x8(%ebp), %eax ;[esp ] = [ebp + 8] (this and next instruction)
mov %eax, (%esp)
call 0x8048f9b <strings_not_equal>
test %eax, %eax
je 0x8048f78 <phase_1+34> ;probably branches to next instruction after ret
call 0x8049198 <failed>
leave
ret
... ;padding here, nop (0x90) or int 3 (0xcc) are common
phase_1 + 34 ... ;continuation of phase_1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.