簡體   English   中英

二進制炸彈第 4 階段 memory 位置

[英]Binary Bomb phase 4 memory location

我的二元炸彈作業已經完成一半了,我有點難過。 這是作業。 這是第 4 階段的轉儲:

Dump of assembler code for function phase_4:
0x08048cdd <+0>:    push   %ebp
0x08048cde <+1>:    mov    %esp,%ebp
0x08048ce0 <+3>:    sub    $0x28,%esp
0x08048ce3 <+6>:    lea    -0x10(%ebp),%eax
0x08048ce6 <+9>:    mov    %eax,0xc(%esp)
0x08048cea <+13>:   lea    -0xc(%ebp),%eax
0x08048ced <+16>:   mov    %eax,0x8(%esp)
0x08048cf1 <+20>:   movl   $0x804a537,0x4(%esp)
0x08048cf9 <+28>:   mov    0x8(%ebp),%eax
0x08048cfc <+31>:   mov    %eax,(%esp)
0x08048cff <+34>:   call   0x8048860 <__isoc99_sscanf@plt> <=== calls for "%d %d"
0x08048d04 <+39>:   cmp    $0x2,%eax
0x08048d07 <+42>:   jne    0x8048d14 <phase_4+55>
0x08048d09 <+44>:   mov    -0x10(%ebp),%eax
0x08048d0c <+47>:   sub    $0x2,%eax
0x08048d0f <+50>:   cmp    $0x2,%eax
0x08048d12 <+53>:   jbe    0x8048d19 <phase_4+60>
0x08048d14 <+55>:   call   0x804921d <explode_bomb>
0x08048d19 <+60>:   mov    -0x10(%ebp),%eax
0x08048d1c <+63>:   mov    %eax,0x4(%esp)
0x08048d20 <+67>:   movl   $0x5,(%esp)
0x08048d27 <+74>:   call   0x8048c91 <func4>
0x08048d2c <+79>:   cmp    -0xc(%ebp),%eax <=== this is where I am stumped
0x08048d2f <+82>:   je     0x8048d36 <phase_4+89>
0x08048d31 <+84>:   call   0x804921d <explode_bomb>
0x08048d36 <+89>:   leave  
0x08048d37 <+90>:   ret    
End of assembler dump.

這是 func4 的轉儲

0x08048c91 <+0>:    push   %ebp
0x08048c92 <+1>:    mov    %esp,%ebp
0x08048c94 <+3>:    push   %edi
0x08048c95 <+4>:    push   %esi
0x08048c96 <+5>:    push   %ebx
0x08048c97 <+6>:    sub    $0x1c,%esp
0x08048c9a <+9>:    mov    0x8(%ebp),%ebx
0x08048c9d <+12>:   mov    0xc(%ebp),%esi
0x08048ca0 <+15>:   test   %ebx,%ebx
0x08048ca2 <+17>:   jle    0x8048cd0 <func4+63>
0x08048ca4 <+19>:   mov    %esi,%eax
0x08048ca6 <+21>:   cmp    $0x1,%ebx
0x08048ca9 <+24>:   je     0x8048cd5 <func4+68>
0x08048cab <+26>:   mov    %esi,0x4(%esp)
0x08048caf <+30>:   lea    -0x1(%ebx),%eax
0x08048cb2 <+33>:   mov    %eax,(%esp)
0x08048cb5 <+36>:   call   0x8048c91 <func4>
0x08048cba <+41>:   lea    (%eax,%esi,1),%edi
0x08048cbd <+44>:   mov    %esi,0x4(%esp)
0x08048cc1 <+48>:   sub    $0x2,%ebx
0x08048cc4 <+51>:   mov    %ebx,(%esp)
0x08048cc7 <+54>:   call   0x8048c91 <func4>
0x08048ccc <+59>:   add    %edi,%eax
0x08048cce <+61>:   jmp    0x8048cd5 <func4+68>
0x08048cd0 <+63>:   mov    $0x0,%eax
0x08048cd5 <+68>:   add    $0x1c,%esp
0x08048cd8 <+71>:   pop    %ebx
0x08048cd9 <+72>:   pop    %esi
0x08048cda <+73>:   pop    %edi
0x08048cdb <+74>:   pop    %ebp
0x08048cdc <+75>:   ret   

我猜測到 +79:“2 3”,但我在 +79 時迷路了。 如何訪問 -0xc(%ebp) 處的值以查找與 %eax 比較的內容? 我知道我需要設置猜測,使 func4 返回一個等於該值的值。 任何幫助表示贊賞。

見上面的評論。 “這很簡單,它是您輸入的第一個數字。因為 scanf 將該地址作為參數傳遞。參見第 +13 行。”

以 3 作為第二個數字,func4 output 36,所以輸入猜測,“36 3”拆除了炸彈。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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