簡體   English   中英

將匯編轉換為C程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM