![拆炸彈實(shí)驗(yàn)報(bào)告_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/22314705-6a59-437f-bc0e-d746b6e39354/22314705-6a59-437f-bc0e-d746b6e393541.gif)
![拆炸彈實(shí)驗(yàn)報(bào)告_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/22314705-6a59-437f-bc0e-d746b6e39354/22314705-6a59-437f-bc0e-d746b6e393542.gif)
![拆炸彈實(shí)驗(yàn)報(bào)告_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/22314705-6a59-437f-bc0e-d746b6e39354/22314705-6a59-437f-bc0e-d746b6e393543.gif)
![拆炸彈實(shí)驗(yàn)報(bào)告_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/22314705-6a59-437f-bc0e-d746b6e39354/22314705-6a59-437f-bc0e-d746b6e393544.gif)
![拆炸彈實(shí)驗(yàn)報(bào)告_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/12/22314705-6a59-437f-bc0e-d746b6e39354/22314705-6a59-437f-bc0e-d746b6e393545.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、HUNAN UNIVERSITY課程實(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 語(yǔ)言文件找到每個(gè)關(guān)卡的入口函數(shù)。然后分析匯編代碼,找到在每個(gè)phase程序段中,引導(dǎo)程序跳轉(zhuǎn)到“ explode_bomb”程序段的地方, 并分析其成功跳轉(zhuǎn)的條件, 以此為突破口尋找應(yīng)該在命令行輸入何種字符通關(guān)。(二)實(shí)驗(yàn)環(huán)境:虛擬機(jī) u
2、buntu 系統(tǒng)下 32 位操作系統(tǒng),終端, gdb 工具。(三)實(shí)驗(yàn)?zāi)康暮筒僮鳎翰鹫◤棞?zhǔn)備操作:查看給出的中的代碼,得知控制檢測(cè)密碼正誤的 6 個(gè)函數(shù)分別為:phase_1, phase_2, phase_3, phase_4, phase_5, phase_6。使用gbd工具對(duì)可執(zhí)行文件bomb進(jìn)行反匯編:打開(kāi)bomb可執(zhí)行文件所在的文件夾輸入反匯編命令objdump -d bomb后,出現(xiàn)了大量匯編代碼,在終端窗口可以看到很多行的匯編代碼。也可以使用匯編指令objdump -d bomb > 將匯編代碼輸出到服務(wù)器上一個(gè)自動(dòng)生成的叫的文件中。szm ubuntu:“/LAB 3B0
3、49fdf:83rerf5p$oxffrfrffr,%edxA049fb2i754jneB049faB <_d o_g lob al_cto r s_a u x* OxBo4yfb4t83£404add$0)C4(%e£pSbpupKebxE。49fb8:SdpopKe bp6049fb9:c3ret8349*53;99nopEfl49fbl);93nopDisasscnblyof secticri *fwi« rO0O49fbc Jfinis:S049fbc:53push8e49fbd:33CCsub$BkB Keape8KOQ 00QOcall8049f
4、CS <_ftnl+0x9>Sbpop虹bx£049ft6:81c32f 20SO GOaddSDk20",% bx6fl45fcc:eSSfE ffffcall白G489郭<_do_g Lobal_dtors_aux>B049fdl!83C498addBa49fd4:SbP°P%ebxB049fd5;c3retsznulbuntu:objdunp -d bonbA lttXt1sznubuntu:-/LAB3531開(kāi)始拆炸彈:<phase_1>:的反匯編代碼如下:0x08048f61 <+0>: push %ebp
5、0x08048f62 <+1>: mov %esp,%ebp0x08048f64 <+3>: sub $0x18,%esp0x804a15c,0x4(%esp)0x08048f67 <+6>: movl(gdb) x/s OxS04al5c 0x804al5c:,rWe have to stand with our North Korean allies.(gdb)結(jié)果為:(gdb) rStarting progran: /hone/szn/LAB3/bombWelcome to ny fiendish little bonb* You have 6 pha
6、ses with which to blow yourself up. Have a hice dmy!We have to stand with our North Korean alites 4Phase 1 defused. How about the next one?結(jié)果正確。<phase_2>反匯編代碼如下:0x08048d7f <+21>:call0x804910b <read_six_numbers> 讀取六0x08048d6a <+0>:push%ebp0x08048d6b <+1>:mov%esp,%ebp0x08
7、048d6d <+3>:push%esi0x08048d6e <+4>:push%ebx0x08048d6f<+5>:sub$0x30,%esp0x08048d72 <+8>:l ea-0x20(%ebp),%eax0x08048d75 <+11>:mov%eax,0x4(%esp)0x08048d79 <+15>:mov0x8(%ebp),%eax0x08048d7c <+18>:mov %eax,(%esp)個(gè)數(shù)字0x08048d84 <+26>:cmpl $0x0,-0x20(%ebp) 0
8、和第一個(gè)數(shù)字比較,不相等則爆炸。0x08048d88 <+30>:jne0x08048d8a <+32>:相等則跳過(guò)爆炸。0x08048d8e <+36>:je0x08048d90 <+38>:call0x08048d95 <+43>:lea0x08048d98 <+46>:lea 向后移一位的地址。0x08048d9b <+49>:mov 給 eax 。0x08048d9e <+52>:add位的數(shù)字。0x8048d90 <phase_2+38>cmpl $0x1,-0x1c(%ebp
9、) 1 和第二個(gè)數(shù)字比較,0x8048d95 <phase_2+43>0x80490d1 <explode_bomb>-0x18(%ebp),%ebx ebx-0x8(%ebp),%esi esi-0x4(%ebx),%eax ebx-0x8(%ebx),%eax eax0x08048da1 <+55>: cmp %eax,(%ebx)ebx 指向的數(shù)字。指向第三個(gè)數(shù)字。指向第六個(gè)數(shù)字再向前第一位的數(shù)字賦再加上 ebx 向前第二ebx 前兩位的和與0x08048da3 <+57>:je0x8048daa <phase_2+64>相等則
10、跳過(guò)爆炸(explode_bomb)0x08048da5 <+59>: call 0x80490d1 <explode_bomb>0x08048daa <+64>: add $0x4,%ebx ebx 地址向后移動(dòng)一位( 四個(gè)字節(jié) ) 。0x08048dad <+67>:cmp %esi,%ebx 如果還未超過(guò)第六位數(shù)字,則跳轉(zhuǎn) 0x8048d9 行。0x08048daf <+69>: jne 0x8048d9b <phase_2+49>0x08048db1 <+71>:add $0x30,%esp0x0804
11、8db4 <+74>:pop %ebx0x08048db5 <+75>:pop %esi0x08048db6 <+76>:pop %ebp0x08048db7 <+77>:ret從上面的代碼分析可知:phase_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 和edx在每次循環(huán)中加1直到寄存器中值超過(guò) 6,程序執(zhí)行完畢。在循環(huán)中執(zhí)行的是
12、一個(gè)數(shù)等于前兩個(gè)數(shù)之和,寄存器ebx每次循環(huán)將向前第一位的數(shù)字賦給寄存器 eax。從而實(shí)現(xiàn)了計(jì)算前 6位的斐波那契數(shù)列的值為:0 1 1 2 3 5 0執(zhí)行結(jié)果如下:Phdse 1 defused- How about the next one? 0 1 1 2 3 SThat's number 2. Keep going 1<phase_3>反匯編代碼如下:0x08048ea1 <+0>:push%ebp0x08048ea2 <+1>:mov%esp,%ebp0x08048ea4 <+3>:sub$0x28,%esp0x08048ea7
13、 <+6>:l ea-0x10(%ebp),%eax0x08048eaa <+9>:mov%eax,0 xc(%esp)此處為第二個(gè)數(shù)字。0x08048eb1 <+16>:mov %eax,0x8(%esp)此處為第一個(gè)數(shù)字0x08048eae <+13>: lea -0xc(%ebp),%eax0x08048eb5 <+20>:movl $0x804a23e,0x4(%esp)用 x/s 0x804a23e 命令查看 $0x804a23e 為0x08048ebd <+28>:mov 0x8(%ebp),%eax %d %
14、d ,即要輸入兩個(gè)整數(shù),上面已經(jīng)指出。0x08048ec0 <+31>:mov %eax,(%esp)0x08048ec3 <+34>: call 0x8048840 <_isoc99_sscanfplt>0x08048ec8 <+39>:cmp $0x1,%eax以上兩行即要求輸入至少兩組數(shù)據(jù),否則引爆。0x08048ecb <+42>:0x08048ecd <+44>:jg 0x8048ed2 <phase_3+49>call 0x80490d1 <explode_bomb> 0x08048ed
15、2 <+49>:cmpl $0x7,-0xc(%ebp) 第一個(gè)數(shù)大于 7 引爆,即第一個(gè)數(shù)小于等于 7。0x08048ed6 <+53>:ja0x8048f43 <phase_3+162>0x08048ed8 <+55>:mov -0xc(%ebp),%eax0x08048edb<+58>:jmp*0x804a1a0(,%eax,4) 跳 轉(zhuǎn) 至0x804a1a0+eax*4( 第一個(gè)數(shù) ) 內(nèi)數(shù)據(jù)所0x08048ee2 <+65>: mov $0x0,%eax指的行數(shù)。0x08048ee7 <+70>:jm
16、p0x8048f3c <phase_3+155>0x08048ee9 <+72>:mov0x08048eee <+77>: xchg0x08048ef0 <+79>:jmp0x08048ef2 <+81>:mov0x08048ef7 <+86>:jmp0x08048ef9 <+88>:mov0x08048efe <+93>:xchg0x08048f00 <+95>:jmp0x08048f02 <+97>:mov$0x0,%eax%ax,%ax0x8048f37 <pha
17、se_3+150>$0x0,%eax0x8048f32 <phase_3+145>$0x0,%eax%ax,%ax0x8048f2d <phase_3+140>$0x0,%eax0x08048f07 <+102>:jmp 0x8048f28 <phase_3+135>0x08048f09 <+104>:mov $0x0,%eax0x08048f0e <+109>:xchg %ax,%ax0x08048f10 <+111>:jmp 0x8048f23 <phase_3+130>$0x314,%e
18、ax當(dāng)?shù)谝粋€(gè)數(shù)為0時(shí)跳轉(zhuǎn)到此0x08048f12 <+113>:mov處,第二個(gè)數(shù)x=78800x08048f17 <+118>:jmp 0x8048f1 e<phase_3+125> 跳轉(zhuǎn)至U 0x8048f1 e。0x08048f19 <+120>:mov0x08048f1 e <+125>:sub0x08048f23 <+130>:add0x08048f28 <+135>:sub0x08048f2d <+140>:add0x08048f32 <+145>:sub0x08048f37
19、 <+150>:add0x08048f3c <+155>:sub$OxO,%eax$0x35a,%eax x=x-858$0x2ef,%eax x=x+751$0x216,%eax x=x-534$0x216,%eax x=x+534$0x216,%eax x=x-534$0x216,%eax x=x+534$0x216,%eax x=x-5340x08048f51 <+176>:jg 0x8048f58 <phase_3+183>0x08048f41<+160>:jmp0x8048f4d <phase_3+172> 跳轉(zhuǎn)
20、到0x8048f4d 行。0x08048f43 <+162>:call 0x80490d1 <explode_bomb>0x08048f48 <+167>:mov $OxO,%eax第一個(gè)數(shù)大于5引爆,即0x08048f4d <+172>:cmpl $0x5,-0xc(%ebp)第一個(gè)數(shù)小于等于5o0x08048f53 <+178>:cmp -0x10(%ebp),%eax第一個(gè)數(shù)是0 時(shí),算得x=147,即第二個(gè)數(shù)0x08048f56 <+181>:je0x8048f5d <phase_3+188> 為 14
21、7。0x08048f58 <+183>:call 0x80490d1 <explode_bomb>0x08048f5d <+188>:leave0x08048f5e <+189>: xchg %ax,%ax0x08048f60 <+191>:ret從以上分析可知:再往下然后看到 jmp輸入指令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ù),
22、也會(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用指令查看*0x804a1a0的值為:(gdt>) p/x *0x8O4ala0$1 = ex8e48fl2(odb) I發(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 +216216+216-2
23、16 + ) = 1472)當(dāng)輸入的第一個(gè)數(shù)是 1時(shí),同理用指令查看* (0x804a1a0+4)的值為(gdb) p/x *(0?(8B4ala0+4)$2 = 0x8。48fl9則代碼從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é)果打印為:<phase_4>反匯編代碼如下:0x08048e2e <+0>: push %ebp0x08048e2f <+1>: mov %
24、esp,%ebp0x08048e31 <+3>: sub $0x28,%esp0x08048e34 <+6>: l ea -0x10(%ebp),%eax0x08048e37 <+9>: mov %eax,0xc(%esp) 此處第二段數(shù)字。0x08048e3b <+13>:lea -0xc(%ebp),%eax0x08048e3e <+16>: mov %eax,0x8(%esp) 此處第一段數(shù)字。0x08048e42 <+20>: movl $0x804a23e,0x4(%esp)$0x804a23e 內(nèi)為d %d即輸
25、入兩個(gè)整數(shù)。0x08048e4a <+28>: mov 0x8(%ebp),%eax0x08048e4d <+31>:mov %eax,(%esp)0x08048e50 <+34>: call 0x8048840 <_isoc99_sscanfplt> 0x08048e55 <+39>: cmp $0x2,%eax 以上兩行要求之前輸入的為兩 個(gè)數(shù)據(jù),否則引爆。0x08048e58 <+42>:jne 0x8048e66 <phase_4+56>0x08048e5a <+44>:mov -0xc(%
26、ebp),%eax0x08048e5d <+47>:test %eax,%eax 第一段數(shù)據(jù)大于等于0 ,否則引 爆。0x08048e5f <+49>: js 0x8048e66 <phase_4+56>0x08048e61 <+51>: cmp $0xe,%eax 第一段數(shù)據(jù)小于等于14 時(shí)跳過(guò)引爆。0x08048e64 <+54>:0x08048e66 <+56>:jle 0x8048e6b <phase_4+61>call 0x80490d1 <explode_bomb> 0x08048e6b
27、 <+61>:movl $0xe,0x8(%esp)0x08048e73 <+69>:movl $0x0,0x4(%esp)0x08048e7b <+77>:mov -0xc(%ebp),%eax0x08048e7e <+80>:mov %eax,(%esp)0x08048e81 <+83>:call0x8048b60 <func4>這幾行為運(yùn)行一個(gè)遞歸函數(shù) func4 來(lái)確定第一0x08048e86 <+88>:cmp $0x1,%eax段數(shù)據(jù)的值。0x08048e89 <+91>:jne0x80
28、48e91 <phase_4+99>0x08048e8b <+93>:cmpl $0x1,-0x10(%ebp) 第二個(gè)數(shù)據(jù)等于 1 則跳過(guò)爆炸。0x08048e8f <+97>: je 0x8048e9d <phase_4+111>0x08048e91 <+99>: lea 0x0(%esi,%eiz,1),%esi0x08048e98 <+106>:call 0x80490d1 <explode_bomb>0x08048e9d <+111>:leave0x08048e9e <+112>
29、;:xchg %ax,%ax0x08048ea0 <+114>:ret以上對(duì)代碼的分析可以看出,第二個(gè)數(shù)據(jù)確定為1。第一個(gè)數(shù)據(jù)范圍為大于等于 0 ,小于14,并且由一個(gè)遞歸函數(shù)func4 又一次縮小了范圍。但因?yàn)檫@個(gè)遞歸函數(shù)太過(guò)繁雜,而第一個(gè)數(shù)據(jù)范圍又不大,直接將第一個(gè)數(shù)據(jù)從 0 嘗試到13,得到了三個(gè)數(shù)字8 、 9 、 11 符合要求。因此密碼有三組: 81, 9 1 , 11 1。<phase_5>反匯編代碼如下:0x08048db8 <+0>: push %ebp0x08048db9 <+1>: mov %esp,%ebp0x08048db
30、b <+3>: push %esi0x08048dbc <+5>: push %ebx0x08048dbd <+7>: sub $0x20,%esp0x08048dc0 <+8>: l ea -0x10(%ebp),%eax0x08048dc3 <+11>:mov%eax,0xc(%esp)此處為第二個(gè)數(shù)。0x08048dc7 <+15>:lea-0xc(%ebp),%eax0x08048dca <+18>:mov%eax,0x8(%esp)此處為第一個(gè)數(shù)。0x08048dce <+22>: mov
31、l $0x804a23e,0x4(%esp)$0x804a23e 內(nèi)為d %d即輸入兩個(gè)整數(shù)。0x08048dd6 <+30>:mov 0x8(%ebp),%eax0x08048dd9 <+33>:mov %eax,(%esp)0x08048ddc <+36>: call 0x8048840 <_isoc99_sscanfplt>0x08048de1 <+41>:cmp $0x1,%eax 以上兩行保證輸入數(shù)據(jù)多于 1 組,否則引爆。0x08048de4 <+44>:jg0x8048deb <phase_5+51&g
32、t;0x08048de6 <+46>:call 0x80490d1 <explode_bomb>0x08048deb <+51>:mov -0xc(%ebp),%eax按位與,即保留第一個(gè)數(shù)的0x08048dee <+54>: and $0xf,%eax后四位。0x08048df1 <+57>:mov %eax,-0xc(%ebp)0x08048df4 <+60>:cmp $0xf,%eax第一個(gè)數(shù)二進(jìn)制后四位不能為(1111) 2,否則引爆。0x08048df7 <+63>:je 0x8048e22 <
33、phase_5+106>0x08048df9 <+65>:mov $0x0,%ecx0x08048dfe <+70>:mov $0x0,%edx0x08048e03 <+75>: mov $0x804a1c0,%ebx $0x804a1c0 指向的是一個(gè)數(shù)組,下面分析。0x08048e08 <+80>:add $0x1,%edx0x08048e0b <+83>:mov (%ebx,%eax,4),%eax0x08048e0e <+86>:add%eax,%ecx0x08048e10 <+88>:cmp$0
34、xf,%eax0x08048e13 <+91>:jne0x8048e08 <phase_5+80> 以上五行為一個(gè)for 循環(huán)語(yǔ)句 ,0x08048e15 <+93>:mov%eax,-0xc(%ebp)0x08048e18 <+96>: cmp $0xf,%edx上述的for循環(huán)要循環(huán)15次0x08048e1b <+99>:jne 0x8048e22 <phase_5+106>0x08048e1d <+101>:cmp %ecx,-0x10(%ebp) 確定第二個(gè)數(shù)的值,下面分析。0x08048e20 <
35、;+104>:je0x8048e27 <phase_5+111>0x08048e22 <+106>:call 0x80490d1 <explode_bomb>0x08048e27 <+111>:add $0x20,%esp0x08048e2a <+114>:pop %ebx0x08048e2b <+115>:pop %esi0x08048e2c <+116>:pop %ebp0x08048e2d <+117>:ret從代碼的分析中可知:需要輸入兩個(gè)數(shù),并且第一個(gè)數(shù)的后四位不能為1111,若為1
36、111則引爆炸彈。在程序中我們會(huì)遇到一個(gè)給定值0x804a1c0。我們可以查看其值為:(gdb) p *Ox804alc0016$8 = 10, 2, 14, 7, 8, 12,15, 11( 6, 4, 1, 13, 3, 9, 6, 50x08048c8a <+1>: mov %esp,%ebp16 個(gè)數(shù)。查看 16 個(gè)值,因?yàn)榘l(fā)現(xiàn)后面的循環(huán)中需要循環(huán)遍歷使用其中最難懂的代碼就是0x08048e0b <+83>:mov (%ebx,%eax,4),%eax這一行代碼, ebx 對(duì)應(yīng)的是 0x804a1c0 對(duì)應(yīng)的首地址。這句話的意思解釋為 C 語(yǔ)言的意思就是 n =
37、 an 。寄存器ecx保存的是計(jì)算得sum的總值。這段代碼翻譯成 c 語(yǔ)言類似于:sum=0;for(i=1;n=15;i+)n=an;sum+=n;其中第一次n 取的值應(yīng)為用戶輸入的第一個(gè)數(shù)二進(jìn)制下的后四位。之后每次都等于an , sum為除去第一次之外所有n取值的和。采用逆推的方法來(lái)求出n 第一次取的值。序號(hào)0123456789101112131415數(shù)1217811104113965組042513for循環(huán)當(dāng)n為15時(shí)終止,因此最后一個(gè) n為15,對(duì)應(yīng)序號(hào)為上一個(gè) n,即6。同理,可以得到,n從第一個(gè)到最后一個(gè)為:5 12 3 7 11 13 9 4 8 0 10 1 2 14 6 15
38、。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 %ebp0x08048c8c <+3>: push %edi0x08048c8d <+4>: push %esi0x08048c8e <+5>: push %ebx0x08048c8f <+6>: sub $0x5c
39、,%esp0x08048c92 <+9>: l ea -0x30(%ebp),%eax0x08048c95 <+12>: mov %eax,0x4(%esp)0x08048c99 <+16>: mov 0x8(%ebp),%eax0x08048c9c <+19>: mov %eax,(%esp)0x08048c9f <+22>: call 0x804910b <read_six_numbers>0x08048ca4 <+27>:mov $0x0,%esi0x08048ca9 <+32>:lea -0
40、x30(%ebp),%edi0x08048cac <+35>: mov (%edi,%esi,4),%eax 第 esi+1 個(gè)數(shù)給 eax 。開(kāi)始外層 for 循環(huán)。0x08048caf <+38>: sub $0x1,%eax eax-0x08048cb2 <+41>: cmp $0x5,%eax eax 小于等于 5 跳過(guò)炸彈 , 即第esi+1 個(gè)數(shù)小于等于60x08048cb5 <+44>:jbe0x8048cbc <phase_6+51>0x08048cdb <+82>:add$0x4,%ebx ebx+=4
41、。0x08048cb7 <+46>:call0x80490d1 <explode_bomb>0x08048cbc <+51>:add$0x1,%esi esi+ 。0x08048cbf <+54>:cmp$0x6,%esi esi不等于 6 時(shí)不跳轉(zhuǎn)。等于6 時(shí)跳轉(zhuǎn)至 0x8048ce6 。0x08048cc2 <+57>:je 0x8048ce6 <phase_6+93>0x08048cc4 <+59>:lea (%edi,%esi,4),%ebx第 esi+1 個(gè)數(shù)給 ebx 。0x08048cc7 <
42、;+62>:mov%esi,-0x4c(%ebp)0x08048cca <+65>:mov-0x4(%edi,%esi,4),%eax 第 esi 個(gè)數(shù)給eax。開(kāi)始內(nèi)層for循環(huán)。0x08048cce <+69>:cmp(%ebx),%eax 若 eax 和 ebx 不相等則跳過(guò)炸彈。0x08048cd0 <+71>:jne0x8048cd7 <phase_6+78>0x08048cd2 <+73>:call0x80490d1 <explode_bomb>0x08048cd7 <+78>:addl$0x
43、1,-0x4c(%ebp)每次加 1。0x08048cde <+85>:cmpl $0x5,-0x4c(%ebp) 小于等于 5 時(shí)跳轉(zhuǎn), 即0x08048d01 <+120>:cmp $0x6,%ebx能循環(huán) 6-esi 次。0x08048ce2 <+89>:jle 0x8048cca <phase_6+65>0x08048ce4 <+91>:jmp 0x8048cac <phase_6+35>0x08048ce6 <+93>:mov$0x0,%ebx0x08048ceb <+98>:lea-0x
44、30(%ebp),%edi0x08048cee <+101>:jmp0x8048d06 <phase_6+125> 跳 轉(zhuǎn) 到 第0x8048d06 行。0x08048cf0 <+103>: mov 0x8(%edx),%edx此處為兩層for 循環(huán)語(yǔ)句 . 作用為通過(guò)用戶0x08048cf3 <+106>: add $0x1,%eax輸入的六個(gè)數(shù)字來(lái)調(diào)整鏈表中6 個(gè)元素的位置。0x08048cf6 <+109>: cmp %ecx,%eax0x08048cf8 <+111>: jne 0x8048cf0 <phas
45、e_6+103>0x08048cfa <+113>: mov %edx,-0x48(%ebp,%esi,4)0x08048cfe <+117>: add $0x1,%ebx0x08048d31 <+168>:mov -0x38(%ebp),%edx0x08048d06 <+125>:mov %ebx,%esi0x08048d08 <+127>:mov (%edi,%ebx,4),%ecx0x08048d0b <+130>:mov $0x804c0c4,%edx 0x804c0c4 查看可知是一個(gè)鏈表,圖下附。0x08
46、048d10 <+135>:mov $0x1,%eax0x08048d15 <+140>:cmp $0x1,%ecx0x08048d18 <+143>:g0x8048cf0 <phase_6+103>0x08048d1a <+145>:mp 0x8048cfa <phase_6+113>0x08048d1c <+147>:mov -0x48(%ebp),%ebx 重新排列鏈表的值。0x08048d1f <+150>:mov -0x44(%ebp),%eax0x08048d22 <+153>
47、;:mov %eax,0x8(%ebx)0x08048d25 <+156>:mov -0x40(%ebp),%edx0x08048d28 <+159>:mov %edx,0x8(%eax)0x08048d2b <+162>:mov -0x3c(%ebp),%eax0x08048d34 <+171>:mov %edx,0x8(%eax)0x08048d37 <+174>:mov -0x34(%ebp),%eax0x08048d3a <+177>:mov %eax,0x8(%edx) 對(duì)鏈表的值進(jìn)行檢測(cè)。0x08048d3d
48、<+180>:movl $0x0,0x8(%eax)0x08048d44 <+187>:mov $0x0,%esi0x08048d49 <+192>:mov 0x8(%ebx),%eax0x08048d4c <+195>:mov (%ebx),%edx0x08048d4e <+197>:cmp (%eax),%edx0x08048d50 <+199>:jge 0x8048d57 <phase_6+206>0x08048d52 <+201>:call 0x80490d1 <explode_bomb>0x08048d57 <+206>:mov 0x8(%ebx),%ebx0x08048d5a <+209>:add $0x1,%esi0x08048d5d &l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年亞洲合作框架協(xié)議
- 2025年公共設(shè)施清潔與保養(yǎng)合同
- 2025年倉(cāng)儲(chǔ)場(chǎng)地租用策劃合同樣本
- 2025年海洋服務(wù)項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模范
- 2025年獨(dú)家代理授權(quán)合同文件
- 2025年企業(yè)復(fù)印紙張采購(gòu)合同范文
- 2025年合同爭(zhēng)議上訴狀
- 2025年個(gè)體挖掘機(jī)租賃合同格式
- 2025年光纖系統(tǒng)維護(hù)勞務(wù)分包協(xié)議
- 2025年企業(yè)租車合作協(xié)議樣本
- 交通大數(shù)據(jù)服務(wù)平臺(tái)建設(shè)方案
- 2024年青島酒店管理職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 預(yù)防食物過(guò)敏
- 16學(xué)時(shí)《中醫(yī)藥膳學(xué)》教學(xué)大綱(可編輯修改文本版)
- 媒體和傳媒行業(yè)的技術(shù)培訓(xùn)資料
- 中國(guó)一流大學(xué)國(guó)際傳播力及其影響因素
- 概算審核服務(wù)投標(biāo)方案(技術(shù)方案)
- 《煤礦地質(zhì)工作細(xì)則》礦安﹝2023﹞192號(hào)
- 《MySQL數(shù)據(jù)庫(kù)項(xiàng)目式教程》項(xiàng)目五 數(shù)據(jù)查詢
- 2024年全國(guó)高考體育單招考試語(yǔ)文試卷試題(含答案詳解)
- SIMATICET200SP全新一代分布式IO
評(píng)論
0/150
提交評(píng)論