拆炸彈實(shí)驗(yàn)報(bào)告_第1頁
拆炸彈實(shí)驗(yàn)報(bào)告_第2頁
拆炸彈實(shí)驗(yàn)報(bào)告_第3頁
拆炸彈實(shí)驗(yàn)報(bào)告_第4頁
拆炸彈實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課程實(shí)驗(yàn)報(bào)告課程 名稱:計(jì)算機(jī)組成與結(jié)構(gòu)實(shí)驗(yàn)名稱:拆炸彈專業(yè)班級(jí):姓名:學(xué)號(hào):完成時(shí)間:(一)實(shí)驗(yàn)?zāi)康模撼绦蜻\(yùn)行中有6個(gè)關(guān)卡(6個(gè)phase),每個(gè)phase需要用戶在終端上輸入特定的字 符或者數(shù)字才能通關(guān),否則會(huì)引爆炸彈!那么如何才能知道輸入什么內(nèi)容呢這需要你使 用gdb工具反匯編出匯編代碼, 結(jié)合c語言文件找到每個(gè)關(guān)卡的入口函數(shù)。然后分析匯編代碼,找到在每個(gè)phase程序段中,引導(dǎo)程序跳轉(zhuǎn)到“explode_bomb”程序段的地方, 并分析其成功跳轉(zhuǎn)的條件,以此為突破口尋找應(yīng)該在命令行輸入何種字符通關(guān)。(二)實(shí)驗(yàn)環(huán)境:虛擬機(jī)ubuntu系統(tǒng)下32位操作系統(tǒng),終端,gdb工具。(三)實(shí)驗(yàn)?zāi)康?/p>

2、和操作:拆炸彈準(zhǔn)備操作:查看給出的中的代碼,得知控制檢測(cè)密碼正誤的6個(gè)函數(shù)分別為:phase,phase_2, phase_3, phase_4, phase_5, phase_6。使用gbd工具對(duì)可執(zhí)行文件 bomb進(jìn)行反匯編:打開bomb可執(zhí)行文件所在的文件夾輸入反匯編命令objdump-d bomb后,出現(xiàn)了大量匯編代碼,在終端窗口可以看到很多行的匯編代碼。 也可以使用匯編指令 objdump -d bomb > 將匯編代碼輸出到服務(wù)器上一個(gè)自動(dòng)生成的叫的文件中。開始拆炸彈:<phase_1>:的反匯編代碼如下:0x08048f61 <+0>:push%eb

3、p0x08048f62 <+1>:mov%esp,%ebp0x08048f64 <+3>:sub$0x18,%esp0x08048f67 <+6>:movl0x804a15c,0x4(%esp)結(jié)果為結(jié)果正確。<phase_2>反匯編代碼如下:0x08048d6a <+0>:push%ebp0x08048d6b <+1>:mov%esp,%ebp0x08048d6d <+3>:push%esi0x08048d6e <+4>:push%ebx0x08048d6f<+5>:sub$0x30,

4、%esp0x08048d72 <+8>:lea-0x20(%ebp),%eax0x08048d75 <+11>:mov 0x08048d79 <+15>:mov 0x08048d7c <+18>: mov 0x08048d7f <+21>: call 0x08048d84 <+26>:cmpl 0x08048d88 <+30>:jne 0x08048d8a <+32>: cmpl 0x08048d8e <+36>:je 0x08048d90 <+38>:call 0x0804

5、8d95 <+43>:lea 0x08048d98 <+46>:lea 0x08048d9b <+49>:mov 0x08048d9e <+52>:add 0x08048da1 <+55>: cmp 0x08048da3 <+57>: je 0x08048da5 <+59>: call 0x08048daa <+64>: add 0x08048dad <+67>:cmp 0x08048daf <+69>: jne 0x08048db1 <+71>:add 0x08

6、048db4 <+74>:pop 0x08048db5 <+75>:pop 0x08048db6 <+76>:pop 0x08048db7 <+77>:ret 從上面的代碼分析可知:%eax,0x4(%esp)0x8(%ebp),%eax%eax,(%esp)0x804910b <read_six_numbers> 讀取六個(gè)數(shù)字 $0x0,-0x20(%ebp) 0 和第一個(gè)數(shù)字比較,不相等則爆炸。0x8048d90 <phase_2+38> $0x1,-0x1c(%ebp) 1 和第二個(gè)數(shù)字比較,相等則跳過爆炸。0x80

7、48d95 <phase_2+43>0x80490d1 <explode_bomb>-0x18(%ebp),%ebx-0x8(%ebp),%esi-0x4(%ebx),%eax-0x8(%ebx),%eax%eax,(%ebx)ebx 指向第三個(gè)數(shù)字。 esi 指向第六個(gè)數(shù)字再向后移一位的地址。ebx 向前第一位的數(shù)字賦給eax。eax 再加上 ebx 向前第二位的數(shù)字。比較 ebx 前兩位的和與ebx 指向的數(shù)字。0x8048daa <phase_2+64> 相等則跳過爆炸(explode_bomb)0x80490d1 <explode_bomb&g

8、t;$0x4,%ebx ebx 地址向后移動(dòng)一位(四個(gè)字節(jié))。%esi,%ebx 如果還未超過第六位數(shù)字,則跳轉(zhuǎn)0x8048d9 行。0x8048d9b <phase_2+49>$0x30,%esp %ebx%esi%ebpphase_2 的密碼需要輸入六位數(shù)字,并且第一個(gè)是0,第二個(gè)是1,然后執(zhí)行到 0x8048d9b這一行代碼發(fā)現(xiàn)往下運(yùn)行會(huì)出現(xiàn)一個(gè)循環(huán), 兩條重要指令是imull -0x4(%esi,%edx,4),%eax 和cmp %eax,(%esi,%edx,4),其中%eax和%3*在每次循環(huán)中加1直到寄存器中值超過 6,程序 執(zhí)行完畢。 在循環(huán)中執(zhí)行的是一個(gè)數(shù)等于前

9、兩個(gè)數(shù)之和, 寄存器 ebx 每次循環(huán)將向前第一位 的數(shù)字賦給寄存器 eax。從而實(shí)現(xiàn)了計(jì)算前 6位的斐波那契數(shù)列的值為:0 1 1 2 3 5。執(zhí)行結(jié)果如下:<phase_3>反匯編代碼如下: 0x08048ea1 <+0>: push %ebp0x08048ea2 <+1>: mov %esp,%ebp0x08048ea4 <+3>: sub0x08048ea7 <+6>: lea0x08048eaa <+9>: mov$0x28,%esp-0x10(%ebp),%eax%eax,0 xc(%esp) 此處為第二個(gè)數(shù)字

10、。0x08048eae <+13>: lea-0xc(%ebp),%eax0x08048eb1 <+16>:mov0x08048eb5 <+20>:movl%eax,0x8(%esp) 此處為第一個(gè)數(shù)字。$0x804a23e,0x4(%esp) 用 x/s 0x804a23e 命令查看 $0x804a23e 為0x08048ebd <+28>:mov0x08048ec0 <+31>: mov0x8(%ebp),%eax %eax,(%esp)%d %d, 即要輸入兩個(gè)整數(shù), 上面已經(jīng)指出。0x08048ec3 <+34>:

11、 call 0x8048840 <_isoc99_sscanfplt>0x08048ec8 <+39>: cmp$0x1,%eax 以上兩行即要求輸入至少兩組數(shù)據(jù),否則引爆。0x08048ecb <+42>: jg 0x08048ecd <+44>: call 0x08048ed2 <+49>:cmpl 0x08048ed6 <+53>:ja 0x08048ed8 <+55>:mov 0x08048edb <+58>:jmp 0x08048ee2 <+65>: mov 0x08048ee

12、7 <+70>:jmp 0x08048ee9 <+72>: mov0x08048eee <+77>:xchg 0x08048ef0 <+79>: jmp 0x08048ef2 <+81>: mov 0x08048ef7 <+86>: jmp 0x08048ef9 <+88>: mov 0x08048efe <+93>:xchg 0x08048f00 <+95>: jmp 0x08048f02 <+97>: mov 0x08048f07 <+102>:jmp 0x0

13、8048f09 <+104>:mov 0x08048f0e <+109>:xchg 0x08048f10 <+111 >:jmp 0x08048f12 <+113>:mov 0x08048f17 <+118>:jmp 0x08048f19 <+120>:mov 0x08048f1 e <+125>:sub 0x08048f23 <+130>:add 0x08048f28 <+135>:sub 0x08048f2d <+140>:add 0x08048f32 <+145&

14、gt;:sub 0x08048f37 <+150>:add 0x08048f3c <+155>:sub 0x08048f41 <+160>:jmp 0x08048f43 <+162>:call 0x08048f48 <+167>:mov 0x08048f4d <+172>:cmpl 0x08048f51 <+176>:jg 0x08048f53 <+178>:cmp 0x08048f56 <+181>:je 0x08048f58 <+183>:call0x8048ed2 &l

15、t;phase_3+49>0x80490d1 <explode_bomb>$0x7,-0xc(%ebp)第一個(gè)數(shù)大于7引爆,即第一個(gè)數(shù)小于等于7。0x8048f43 <phase_3+162>-Oxc(%ebp),%eax*0x804a1a0(,%eax,4)跳轉(zhuǎn)至 0x804a1a0+eax*4(第一個(gè)數(shù))內(nèi)數(shù)據(jù)所$0x0,%eax指的行數(shù)。0x8048f3c <phase_3+155>$0x0,%eax %ax,%ax0x8048f37 <phase_3+150>$0x0,%eax0x8048f32 <phase_3+145>

16、;$0x0,%eax%ax,%ax0x8048f2d <phase_3+140>$0x0,%eax0x8048f28 <phase_3+135>$0x0,%eax%ax,%ax0x8048f23 <phase_3+130>$0x314,%eax當(dāng)?shù)谝粋€(gè)數(shù)為。時(shí)跳轉(zhuǎn)到此處,第二個(gè)數(shù)x=788o0x8048f1e <phase_3+125> 跳轉(zhuǎn)至U 0x8048f1eo$0x0,%eax$0x35a,%eax x=x-858$0x2ef,%eax x=x+751$0x216,%eax x=x-534$0x216,%eax x=x+534$0x216

17、,%eax x=x-534$0x216,%eax x=x+534$0x216,%eax x=x-5340x8048f4d <phase_3+172> 跳轉(zhuǎn)至U 0x8048f4d 行。0x80490d1 <explode_bomb>$0x0,%eax$0x5,-0xc(%ebp)第一個(gè)數(shù)大于5引爆,即第一個(gè)數(shù)小于等于5。0x8048f58 <phase_3+183>-Ox1O(%ebp),%eax第一個(gè)數(shù)是0時(shí),算得x=147,即第二個(gè)數(shù) 0x8048f5d <phase_3+188> 為 147。0x80490d1 <explode_bo

18、mb>0x08048f5d <+188>:leave0x08048f5e <+189>: xchg %ax,%ax0x08048f60 <+191>:ret從以上分析可知:再往下然后看到j(luò)mp0x08048e2e <+0>: push 0x08048e2f <+1>: mov 0x08048e31 <+3>: sub 0x08048e34 <+6>: lea 0x08048e37 <+9>: mov 0x08048e3b <+13>:lea 0x08048e3e <+16&g

19、t;: mov 0x08048e42 <+20>:movl 0x08048e4a <+28>: mov 0x08048e4d <+31>:mov 0x08048e50 <+34>: call 0x08048e55 <+39>: cmp 0x08048e58 <+42>: jne 0x08048e5a <+44>: mov 0x08048e5d <+47>:test 0x08048e5f <+49>: js 0x08048e61 <+51>: cmp 0x08048e64 &l

20、t;+54>: jle 0x08048e66 <+56>: call 0x08048e6b <+61>:movl 0x08048e73 <+69>: movl 0x08048e7b <+77>:mov 0x08048e7e <+80>: mov 0x08048e81 <+83>: call0x08048e86 <+88>: cmp 0x08048e89 <+91>: jne 0x08048e8b <+93>:cmpl 0x08048e8f <+97>: je 0x080

21、48e91 <+99>: lea輸入指令 x/s 0x8049abb ,得到 0x8049abb:"%d %d" ,顯示出應(yīng)該輸入兩個(gè)數(shù)字。如果輸入不滿足兩個(gè)數(shù),則會(huì)引爆炸彈,并且第二個(gè)與第一個(gè)數(shù)的值相關(guān)。第一個(gè)值得范圍為 0-5 的整數(shù),當(dāng)?shù)谝粋€(gè)數(shù)輸入的不是0-5 的整數(shù),也會(huì)引爆炸彈。輸入的第一個(gè)數(shù)存入在寄存器eax中,并且根據(jù)跳轉(zhuǎn)指令jmp *0x804a1a0(,%eax,4)選擇將要跳轉(zhuǎn)的位置,執(zhí)行相應(yīng)的代碼計(jì)算出第二個(gè)需要輸入的值。1 )當(dāng)?shù)谝粋€(gè)數(shù)輸入的是0, eax 寄存器中對(duì)應(yīng)的值為0,則跳轉(zhuǎn)到指令*0x804a1a0用指令查看*0x804a1a

22、0 的值為:發(fā)現(xiàn) *0x804a1a0 對(duì)應(yīng)的值為0x8048f12, 找到 0x08048f12 對(duì)應(yīng)的代碼執(zhí)行發(fā)現(xiàn)第二個(gè)數(shù)計(jì)算得結(jié)果為:x = 0x(314-35a - 2ef - 216 +216-216+216-216 + ) = 1472)當(dāng)輸入的第一個(gè)數(shù)是1時(shí),同理用指令查看* (0x804a1a0+4)的值為則代碼從 0x08048f19 對(duì)應(yīng)的代碼執(zhí)行第二個(gè)數(shù)計(jì)算得結(jié)果為:x = 0x(-35a - 2ef - 216 +216-216+216-216 + ) = -6413)同理輸入2,3,4,5 對(duì)應(yīng)的第二個(gè)數(shù)字為: 217,534,0,-534結(jié)果打印為:<phas

23、e_4>反匯編代碼如下:%ebp%esp,%ebp$0x28,%esp-0x10(%ebp),%eax%eax,0xc(%esp) 此處第二段數(shù)字。-0xc(%ebp),%eax%eax,0x8(%esp) 此處第一段數(shù)字。$0x804a23e,0x4(%esp) $0x804a23e 內(nèi)為 %d %d, 即輸入兩個(gè)整數(shù)。0x8(%ebp),%eax%eax,(%esp)0x8048840 <_isoc99_sscanfplt>$0x2,%eax 以上兩行要求之前輸入的為兩個(gè)數(shù)據(jù),否則引爆。0x8048e66 <phase_4+56>-0xc(%ebp),%eax

24、%eax,%eax 第一段數(shù)據(jù)大于等于0,否則引爆。0x8048e66 <phase_4+56>$0xe,%eax 第一段數(shù)據(jù)小于等于14 時(shí)跳過引爆。0x8048e6b <phase_4+61>0x80490d1 <explode_bomb>$0xe,0x8(%esp)$0x0,0x4(%esp)-0xc(%ebp),%eax%eax,(%esp)0x8048b60 <func4> 這幾行為運(yùn)行一個(gè)遞歸函數(shù)func4 來確定第一$0x1,%eax段數(shù)據(jù)的值。0x8048e91 <phase_4+99>$0x1,-0x10(%ebp)

25、 第二個(gè)數(shù)據(jù)等于1 則跳過爆炸。0x8048e9d <phase_4+111>0x0(%esi,%eiz,1),%esi0x08048e98 <+106>:call0x80490d1 <explode_bomb>0x08048e9d <+111>:leave0x08048e9e <+112>:xchg %ax,%ax0x08048ea0 <+114>:ret以上對(duì)代碼的分析可以看出, 第二個(gè)數(shù)據(jù)確定為 1 。第一個(gè)數(shù)據(jù)范圍為大于等于0, 小于 14 ,并且由一個(gè)遞歸函數(shù)func4 又一次縮小了范圍。 但因?yàn)檫@個(gè)遞歸函數(shù)太過

26、繁雜,而第一個(gè)數(shù)據(jù)范圍又不大,直接將第一個(gè)數(shù)據(jù)從0 嘗試到 13,得到了三個(gè)數(shù)字8、 9、 11 符合要求。因此密碼有三組: 8 1, 9 1, 11 1 。<phase_5>反匯編代碼如下:0x08048db8 <+0>:push0x08048db9 <+1>:mov0x08048dbb <+3>:0x08048dbc <+4>:0x08048dbd <+5>:push push sub0x08048dc0 <+8>:lea0x08048dc3 <+11>: mov0x08048dc7 <+

27、15>: lea0x08048dca <+18>: mov0x08048dce <+22>:movl0x08048dd6 <+30>:mov0x08048dd9 <+33>:mov0x08048ddc <+36>: call0x08048de1 <+41>:cmp0x08048de4 <+44>:jg0x08048de6 <+46>:call0x08048deb <+51>:mov0x08048dee <+54>:and0x08048df1 <+57>: m

28、ov0x08048df4 <+60>: cmp0x08048df7 <+63>: je0x08048df9 <+65>: mov0x08048dfe <+70>: mov0x08048e03 <+75>: mov0x08048e08 <+80>: add0x08048e0b <+83>:mov0x08048e0e <+86>: add0x08048e10 <+88>: cmp0x08048e13 <+91>: jne0x08048e15 <+93>: mov0x0

29、8048e18 <+96>: cmp0x08048e1b <+99>:jne0x08048e1d <+101>:cmp0x08048e20 <+104>:je0x08048e22 <+106>:call%ebp%esp,%ebp%esi%ebx$0x20,%esp-0x10(%ebp),%eax%eax,0xc(%esp) 此處為第二個(gè)數(shù)。-0xc(%ebp),%eax%eax,0x8(%esp) 此處為第一個(gè)數(shù)。$0x804a23e,0x4(%esp) $0x804a23e 內(nèi)為 %d %d, 即輸入兩個(gè)整數(shù)。0x8(%ebp),%

30、eax%eax,(%esp)0x8048840 <_isoc99_sscanfplt>$0x1,%eax 以上兩行保證輸入數(shù)據(jù)多于1 組,否則引爆。0x8048deb <phase_5+51>0x80490d1 <explode_bomb>-0xc(%ebp),%eax$0xf,%eax 按位與,即保留第一個(gè)數(shù)的后四位。%eax,-0xc(%ebp)$0xf,%eax 第一個(gè)數(shù)二進(jìn)制后四位不能為(1111) 2,否則引爆。0x8048e22 <phase_5+106>$0x0,%ecx$0x0,%edx$0x804a1c0,%ebx $0x804

31、a1c0 指向的是一個(gè)數(shù)組,下面分析。$0x1,%edx(%ebx,%eax,4),%eax%eax,%ecx$0xf,%eax0x8048e08 <phase_5+80> 以上五行為一個(gè)for 循環(huán)語句 ,%eax,-0xc(%ebp)$0xf,%edx 上述的 for 循環(huán)要循環(huán)15 次。0x8048e22 <phase_5+106>%ecx,-0x10(%ebp) 確定第二個(gè)數(shù)的值,下面分析。0x8048e27 <phase_5+111>0x80490d1 <explode_bomb>0x08048e27 <+111>:add$

32、0x20,%esp0x08048e2a <+114>:pop%ebx0x08048e2b <+115>:pop%esi0x08048e2c <+116>:pop%ebp0x08048e2d <+117>:ret從代碼的分析中可知:需要輸入兩個(gè)數(shù),并且第一個(gè)數(shù)的后四位不能為1111,若為1111則引爆炸彈。在程序中我們會(huì)遇到一個(gè)給定值 0x804a1c0。我們可以查看其值為:查看16個(gè)值,因?yàn)榘l(fā)現(xiàn)后面的循環(huán)中需要循環(huán)遍歷使用16個(gè)數(shù)。其中最難懂的代碼就是0x08048e0b <+83>:mov(%ebx,%eax,4),%eax這一行代

33、碼,ebx對(duì)應(yīng)的是0x804a1c0對(duì)應(yīng)的首地址。這句話的意思解釋為 C語言的意思就是 n = an。寄存器ecx保存的是計(jì)算得sum的總值。這段代碼翻譯成c語言類似于:sum=0;for(i=1;n=15;i+)n=an;sum+=n;其中第一次n取的值應(yīng)為用戶輸入的第一個(gè)數(shù)二進(jìn)制下的后四位。之后每次都等于an, sum為除去第一次之外所有 n取值的和。采用逆推的方法來求出n第一次取的值。序號(hào)0123456789111111012345數(shù)組1217811104113965042513for循環(huán)當(dāng)n為15時(shí)終止,因此最后一個(gè)n為15,對(duì)應(yīng)序號(hào)為上一個(gè)n,即6。同理,可以得到,n從第一個(gè)到最后一

34、個(gè)為:5 12 3 7 11 13 9 4 8 0 10 1 2 14 6 15。sum=15*16/2-5=115。即用戶輸入的第二個(gè)數(shù)為115。用戶輸入第一個(gè)數(shù)二進(jìn)制下的后四位為0101(即第一個(gè)n=5),由于第一位只要滿足輸入的數(shù)的后四位不為1111,第二個(gè)數(shù)為115即可,如:10 115,5 1 15。<phase_6>反匯編代碼如下:0x08048c89 <+0>:push%ebp0x08048c8a <+1>:mov%esp,%ebp0x08048c8c <+3>:push%edi0x08048c8d <+4>:push%

35、esi0x08048c8e <+5>:push%ebx0x08048c8f<+6>:sub$0x5c,%esp0x08048c92 <+9>:lea-0x30(%ebp),%eax0x08048c95 <+12>: mov%eax,0x4(%esp)0x08048c99 <+16>: mov0x08048c9c <+19>: mov0x08048c9f <+22>: call0x08048ca4 <+27>: mov0x08048ca9 <+32>: lea0x08048cac <

36、+35>: mov0x08048caf <+38>: sub0x08048cb2 <+41>: cmp0x08048cb5 <+44>: jbe0x8(%ebp),%eax%eax,(%esp)0x804910b <read_six_numbers>$0x0,%esi-0x30(%ebp),%edi(%edi,%esi,4),%eax 第 esi+1 個(gè)數(shù)給 eax。開始外層 for 循環(huán)。$0x1,%eaxeax-。$0x5,%eax eax小于等于5跳過炸彈,即第esi+1個(gè)數(shù)小于等于 6。0x08048cb7 <+46>:

37、 call0x80490d1 <explode_bomb>0x08048cbc <+51>: add0x08048cbf <+54>: cmp0x08048cc2 <+57>: je0x08048cc4 <+59>: lea$0x1,%esi esi+ 。$0x6,%esi esi 不等于 6 時(shí)不跳轉(zhuǎn)。等于6 時(shí)跳轉(zhuǎn)至 0x8048ce6 。0x8048ce6 <phase_6+93>(%edi,%esi,4),%ebx 第 esi+1 個(gè)數(shù)給ebx。0x08048cc7 <+62>: mov%esi,-0x

38、4c(%ebp)0x08048cca <+65>: mov -0x4(%edi,%esi,4),%eax 第 esi 個(gè)數(shù)給 eax。開始內(nèi)層 for 循環(huán)。0x08048cce <+69>: cmp(%ebx),%eax若eax和ebx不相等則跳過炸彈。0x08048cd0 <+71>: jne0x08048cd2 <+73>: call0x08048cd7 <+78>: addl0x08048cdb <+82>: add0x08048cde <+85>: cmpl0x8048cd7 <phase_6+

39、78>0x80490d1 <explode_bomb>$0x1,-0x4c(%ebp) 每次加 1 。$0x4,%ebx ebx+=4 。$0x5,-0x4c(%ebp) 小于等于 5 時(shí)跳轉(zhuǎn),即能循環(huán)6-esi 次。0x08048ce2 <+89>: jle0x8048cca <phase_6+65>0x08048ce4 <+91>: jmp0x8048cac <phase_6+35>0x08048ce6 <+93>: mov $0x0,%ebx0x08048ceb <+98>: lea0x08048c

40、ee <+101>:jmp0x08048cf0 <+103>: mov0x08048cf3 <+106>: add-0x30(%ebp),%edi0x8048d06 <phase_6+125> 跳轉(zhuǎn)到第 0x8048d06 行。0x8(%edx),%edx 此處為兩層 for 循環(huán)語句 .作用為通過用戶$0x1,%eax 輸入的六個(gè)數(shù)字來調(diào)整鏈表中 6 個(gè)元素的位置。0x08048cf6 <+109>:cmp %ecx,%eax0x08048cf8 <+111>: jne 0x08048cfa <+113>:

41、mov0x08048cfe <+117>: add 0x08048d01 <+120>:cmp 0x08048d04 <+123>:je 0x08048d06 <+125>:mov0x08048d08 <+127>:mov 0x08048d0b <+130>:mov 0x08048d10 <+135>:mov0x8048cf0 <phase_6+103> %edx,-0x48(%ebp,%esi,4)$0x1,%ebx$0x6,%ebx0x8048d1c <phase_6+147>%eb

42、x,%esi(%edi,%ebx,4),%ecx $0x804c0c4,%edx 0x804c0c4 查看可知是一個(gè)鏈表,圖下附。$0x1,%eax0x08048d15 <+140>:cmp0x08048d18 <+143>:g0x08048d1a <+145>:mp0x08048d1c <+147>:mov0x08048d1f <+150>:mov$0x1,%ecx0x8048cf0 <phase_6+103>0x8048cfa <phase_6+113>-0x48(%ebp),%ebx 重新排列鏈表的值。-

43、0x44(%ebp),%eax0x8048cbc <phase_6+51>0x08048d22 <+153>:mov 0x08048d25 <+156>:mov 0x08048d28 <+159>:mov 0x08048d2b <+162>:mov 0x08048d2e <+165>:mov 0x08048d31 <+168>:mov 0x08048d34 <+171>:mov0x08048d37 <+174>:mov 0x08048d3a <+177>:mov 0x08048d3d <+180>:movl 0x08048d44 <+187>:mov 0x08048d49 <+192>:mov 0x08048d4c <+195>:mov 0x08048d4e <+197&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論