湖南大学计算机系统原理实验,湖南大学-计算机组成原理实验-实验3-bomblab_图文.pdf...
課程實驗報告
課 程 名 稱: 計算機組成與結構
實驗項目名稱: bomblab
專 業 班 級:
姓 名:
學 號:
指 導 教 師:
完 成 時 間: 2016 年 4 月 20 日
信息科學與工程學院
實驗題目:bomblab
實驗目的:程序運行在linux 環境中。程序運行中有6 個關卡(6 個phase),每個phase
需要用戶在終端上輸入特定的字符或者數字才能通關,否則會引爆炸彈!那么如何才
能知道輸入什么內容呢?這需要你使用gdb 工具反匯編出匯編代碼,結合c 語言文件
找到每個關卡的入口函數。然后分析匯編代碼,找到在每個phase 程序段中,引導程
序跳轉到“explode_bomb”程序段的地方,并分析其成功跳轉的條件,以此為突破口
尋找應該在命令行輸入何種字符通關。
實驗環境:ubuntu14.04 虛擬機、gdb 工具
實驗內容及操作步驟:
首先打開bomb.c 文件,發現這個文件里只有主函數,沒有具體的代碼,所以我們
要通過反匯編得到6 關的具體代碼。
反匯編有兩個具體的方法:
第一種:objdump -d bomb > 1.txt 將反匯編結果輸出到1.txt 中
第二種:使用gdb 調試bomb,命令為(gdb)disas func_name,其中func_name
對應于本次實驗中的六個函數phase_1~6,再將結果復制到word 中。
我采用第二種方法得到反匯編代碼,下面對六個bomb 進行分析、得到我們拆炸彈
所需的密碼。
Phase_1 內容如下
0x08048f61 : push %ebp
0x08048f62 : mov %esp,%ebp
0x08048f64 : sub $0x18,%esp 這里對esp-24
0x08048f67 : movl $0x804a15c,0x4(%esp) 這是將$0x804a15c 處的
值存入esp+4 中
0x08048f6f : mov 0x8(%ebp),%eax ebp+8 就是從調用函數處取出第
一個參數,放到eax 寄存器中
0x08048f72 : mov %eax,(%esp) 將eax 的值傳給esp
0x08048f75 : call 0x8048fab 此處是入口函
數的地址0x8048fab,該函數要調用的參數為esp+4(即$0x804a15c 處的值),和ebp+8
(即我們輸入的值)該函數的作用是 :判斷字符串是否相等
考慮一個函數的返回值要存在eax 中,則以下的eax 已經發生改變,是判斷字符
串是否相等的結果
0x08048f7a : test %eax,%eax
0x08048f7c : je 0x8048f83
0x08048f7e : call 0x80490d1
以上三句,如果eax 不為0,則引爆炸彈,如果eax 為0,則跳轉到leave 語句函
數結束。說明eax 為0 時,可以進入下一關
0x08048f83 : leave
0x08048f84 : ret
解題過程:
本題的棧幀結構如下:
根據以上分析,我們發現,從鍵盤輸入一個值,放到 (新)ebp+8 中,接著函數
進行調用,把他傳到esp 中,接著,函數再從$0x804a15c 這個地址取值,放到esp+8
中,接著,程序對這兩個參數進行函數調用,調用判斷字符串是否相等的程序string
not equal 進行判斷,如果二者相等,則返回值為0,不引爆炸彈,反之,只要二者不
相等,則炸彈爆炸。
分析結論:此處的密碼存在地址$0x804a15c 中,我們只要查看該地址
總結
以上是生活随笔為你收集整理的湖南大学计算机系统原理实验,湖南大学-计算机组成原理实验-实验3-bomblab_图文.pdf...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机技术大神,2017考研:计算机科学
- 下一篇: 计算机操作简介,什么是计算机操作的快捷键