CSAPP 3e: Bomb lab (phase_2) + lab中的GDB 使用

來源:互聯網
上載者:User

標籤:pre   input   log   exp   def   命令   2-2   方法   一個   

  這裡是第二關,在這裡分享一些在解題過程中用到的GDB功能。

  首先,要進行斷點,比如,在第二關中,斷點操作有:

81:    input = read_line();82:    phase_2(input);83:    phase_defused();

  break 81;  break 82;  break 83;  分別在read_line,phase_2,phase_defused,三個函數入口進行了斷點。

另外,還有一個地方需要斷點,那就是explode_bomb;操作:break explode_bomb。

  之後可以使用跳轉命令直接在運行到斷點後跳轉到某個函數 或某個地址。在這個lab裡我經常用的是jump *0x地址。直接跳轉到read_line函數,這樣就不用再後邊的關卡中非要一關一關地輸入,直到正在調試的那一關。為了正確跳轉到read_line,我需要知道那一關的read_line函數地址,這個地址可以通過info break(顯示斷點資訊)得到。

  ,info break得到斷點地址後,jump直接跳轉到函數入口。 eg:jump *0x400e4e。

 

  同時,還需要進行單步運行調試,查看寄存器值。用 layout regs 命令可以做到。然後 si , ni ,進行逐步執行(si會運行進入被調用函數內,ni不進入調用函數)

  

然後是查看記憶體的命令:x/(n/f/u) 0x地址。百度查詢多種用法,這就不一一贅述了。

 

************************************************************************************************************************************************

分割線

************************************************************************************************************************************************

 

這裡貼上phase_2的解題方法,通過注釋的形式寫出來了。

0000000000400efc <phase_2>:  400efc:    55                       push   %rbp  400efd:    53                       push   %rbx  400efe:    48 83 ec 28              sub    $0x28,%rsp  400f02:    48 89 e6                 mov    %rsp,%rsi  400f05:    e8 52 05 00 00           callq  40145c <read_six_numbers>  400f0a:    83 3c 24 01              cmpl   $0x1,(%rsp)                    ;如果第一個數(sp)不等於1,bomb.  400f0e:    74 20                    je     400f30 <phase_2+0x34>  400f10:    e8 25 05 00 00           callq  40143a <explode_bomb>  400f15:    eb 19                    jmp    400f30 <phase_2+0x34>  400f17:    8b 43 fc                 mov    -0x4(%rbx),%eax                  400f1a:    01 c0                    add    %eax,%eax  400f1c:    39 03                    cmp    %eax,(%rbx)                    ;如果第一個數的2倍不等於第二個數,bomb.  400f1e:    74 05                    je     400f25 <phase_2+0x29>        ;eg:1*2 == 2;第二個數為2;  400f20:    e8 15 05 00 00           callq  40143a <explode_bomb>  400f29:    48 39 eb                 cmp    %rbp,%rbx                  400f25:    48 83 c3 04              add    $0x4,%rbx                    ;棧指標+1,向後移位(檢查後邊的數字)  400f2c:    75 e9                    jne    400f17 <phase_2+0x1b>        ;如果移位沒有到最後一個數字(第六個)  400f2e:    eb 0c                    jmp    400f3c <phase_2+0x40>        ;迴圈執行檢查.  400f30:    48 8d 5c 24 04           lea    0x4(%rsp),%rbx                ;%rbx儲存第2位元字的起始地址。(資料棧頂)  400f35:    48 8d 6c 24 18           lea    0x18(%rsp),%rbp                ;%bpx儲存最後第6位的結束地主。(資料棧底)  400f3a:    eb db                    jmp    400f17 <phase_2+0x1b>  400f3c:    48 83 c4 28              add    $0x28,%rsp  400f40:    5b                       pop    %rbx            ;按規律得出答案 "1 2 4 8 16 32".  400f41:    5d                       pop    %rbp  400f42:    c3                       retq   

 

得出第二關的答案“1 2 4 8 16 32”

CSAPP 3e: Bomb lab (phase_2) + lab中的GDB 使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.