![華中科技大學(xué)計(jì)算機(jī)系統(tǒng)基礎(chǔ)實(shí)驗(yàn)報告_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/28/4946aa87-e9c9-49c3-b3bc-866ffea2b7de/4946aa87-e9c9-49c3-b3bc-866ffea2b7de1.gif)
![華中科技大學(xué)計(jì)算機(jī)系統(tǒng)基礎(chǔ)實(shí)驗(yàn)報告_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/28/4946aa87-e9c9-49c3-b3bc-866ffea2b7de/4946aa87-e9c9-49c3-b3bc-866ffea2b7de2.gif)
![華中科技大學(xué)計(jì)算機(jī)系統(tǒng)基礎(chǔ)實(shí)驗(yàn)報告_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/28/4946aa87-e9c9-49c3-b3bc-866ffea2b7de/4946aa87-e9c9-49c3-b3bc-866ffea2b7de3.gif)
![華中科技大學(xué)計(jì)算機(jī)系統(tǒng)基礎(chǔ)實(shí)驗(yàn)報告_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/28/4946aa87-e9c9-49c3-b3bc-866ffea2b7de/4946aa87-e9c9-49c3-b3bc-866ffea2b7de4.gif)
![華中科技大學(xué)計(jì)算機(jī)系統(tǒng)基礎(chǔ)實(shí)驗(yàn)報告_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-4/28/4946aa87-e9c9-49c3-b3bc-866ffea2b7de/4946aa87-e9c9-49c3-b3bc-866ffea2b7de5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、等中科技火孚課程實(shí)驗(yàn)報告課程名稱:計(jì)算機(jī)系統(tǒng)基礎(chǔ)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院目錄錯誤 !錯誤 !錯誤 !實(shí)驗(yàn)1: 實(shí)驗(yàn) 2 實(shí)驗(yàn) 3 實(shí)驗(yàn)總結(jié)錯誤!未定義書簽。實(shí)驗(yàn)1:數(shù)據(jù)表示實(shí)驗(yàn)概述本實(shí)驗(yàn)的目的是更好地熟悉和掌握計(jì)算機(jī)中整數(shù)和浮點(diǎn)數(shù)的二進(jìn)制編碼表 示。實(shí)驗(yàn)中,你需要解開一系列編程“難題”一一使用有限類型和數(shù)量的運(yùn)算操 作實(shí)現(xiàn)一組給定功能的函數(shù),在此過程中你將加深對數(shù)據(jù)二進(jìn)制編碼表示的了 解。實(shí)驗(yàn)語言:c;實(shí)驗(yàn)環(huán)境:linux實(shí)驗(yàn)內(nèi)容需要完成 中下列函數(shù)功能,具體分為三大類:位操作、補(bǔ)碼運(yùn)算和浮點(diǎn)數(shù)操 作。實(shí)驗(yàn)設(shè)計(jì)源碼如下:/* IsbZero - set 0 to the least signifi
2、cant bit of x* Example: lsbZero(0x) = 0x* Legal ops: ! & 人 | + << >>* Max ops: 5* Rating: 1* /int lsbZero(int x) * Examples: mult3div2(11) = 16* mult3div2(-9) = -13* mult3div2(24) = -2(overflow)* Legal ops: ! & A | + << >>* Max ops: 12* Rating: 2* /int mult3div2(int x
3、) * You may assume -TMax <= x <= TMax* Legal ops: ! & 人 | + << >>* Max ops: 10* Rating: 4* /int absVal(int x) * Both the argument and result are passed as unsigned int's, but* they are to be interpreted as the bit-level representations of* single-precision floating point va
4、lues.* When argument is NaN, return argument.* Legal ops: Any integer/unsigned operations incl. |, &&. also if, while* Max ops: 10* Rating: 2* /unsigned float_abs(unsigned uf) int x=uf&(1<<31);if(x>0x7f800000)return uf; else return x;/* float_f2i - Return bit-level equivalent of
5、 expression (int) f* for floating point argument f.* Argument is passed as unsigned int, but* it is to be interpreted as the bit-level representation of a* single-precision floating point value.* Anything out of range (including NaN and infinity) should return* 0xu.* Legal ops: Any integer/unsigned
6、operations incl. |, &&. also if, while* Max ops: 30* Rating: 4* /int float_f2i(unsigned uf) unsigned num=0x;int x=(uf&0x007fffff)A0x00800000;int order=0;order=(uf&0x7f800000)>>23;if(order>158)return num;if(order<127) return 0;else if(uf>>31)&1)=1)if(order>150
7、)return (x<<(order-150)+1;else return (x>>(150-order)+1;elseif(order>150) return x<<(order-150);else return x>>(150-order);實(shí)驗(yàn)過程編寫源碼,運(yùn)行btest ,得出實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)結(jié)果 tanglhveiestlng: -/tangll weltangliwetesting:cd tangli wet/ tangltwelesttng:-/tangli wei$ ./btestScoreRatingErrorsFunctio
8、n110Isbzero220byteNot220byteXor330logicalAnd330logicalOr1 330rotateLeft440paritycheck220mulZOK220nult3dtv2330subOK440absVal220flost_abs440flodtlf21Totalpoints:35/35tangltwetesttng:-/tangli wet$ I可見13個函數(shù)全部正確實(shí)驗(yàn)小結(jié)此次實(shí)驗(yàn)主要考查的是對數(shù)據(jù)的處理,對此需要掌握數(shù)據(jù)在機(jī)器中的表示, 運(yùn)用合理的位運(yùn)算來實(shí)現(xiàn)相應(yīng)的功能實(shí)驗(yàn) 2: Binary Bombs實(shí)驗(yàn)概述本實(shí)驗(yàn)中,你要使用課程所學(xué)知識拆除一
9、個" binary bombS'來增強(qiáng)對程序 的機(jī)器級表示、匯編語言、調(diào)試器和逆向工程等方面原理與技能的掌握。一個"binary bombs" (二進(jìn)制炸彈,下文將簡稱為炸彈)是一個 Linux 可執(zhí)行C程序,包含了 6個階段(phase1phase6)。炸彈運(yùn)行的每個階段要求你 輸入一個特定的字符串,若你的輸入符合程序預(yù)期的輸入,該階段的炸彈就被“拆除”,否則炸彈“爆炸”并打印輸出"BOOM!”字樣。實(shí)驗(yàn)的目標(biāo)是拆除盡 可能多的炸彈層次。每個炸彈階段考察了機(jī)器級語言程序的一個不同方面,難度逐級遞增:* 階段1:字符串比較* 階段2:循環(huán)* 階段
10、3:條件/分支* 階段4:遞歸調(diào)用和棧* 階段5:指針* 階段6:鏈表/指針/結(jié)構(gòu)另外還有一個隱藏階段,但只有當(dāng)你在第4階段的解之后附加一特定字符串 后才會出現(xiàn)。為了完成二進(jìn)制炸彈拆除任務(wù),你需要使用gdb調(diào)試器和objdump來反匯編 炸彈的可執(zhí)行文件,并單步跟蹤調(diào)試每一階段的機(jī)器代碼, 從中理解每一匯編語 言代碼的行為或作用,進(jìn)而設(shè)法“推斷”出拆除炸彈所需的目標(biāo)字符串。 這可能 需要你在每一階段的開始代碼前和引爆炸彈的函數(shù)前設(shè)置斷點(diǎn),以便于調(diào)試。實(shí)驗(yàn)語言:C語言實(shí)驗(yàn)環(huán)境:linux實(shí)驗(yàn)內(nèi)容反匯編bomb得到匯編代碼,根據(jù)匯編代碼完成拆炸彈任務(wù)。階段1字符串比較1 .任務(wù)描述:找到與輸入的字
11、符串進(jìn)行比較的存儲的字符串的首地址,進(jìn)而得到存儲的字符用,得到結(jié)果。2 .實(shí)驗(yàn)設(shè)計(jì):根據(jù)反匯編代碼一步一步分析,具體見實(shí)驗(yàn)過程。3 .實(shí)驗(yàn)過程:將bomb反匯編輸出到文件中,在反匯編代碼中查找phase_1的位置:08048b90 <phase 1>:8048b90:83 ec1Csub$0xlc j%esp8日48b93:C7 4424 04 0404rovt$OxB94a2641Bx4(%esp)B64Bb9a:088048b9t>:8b 4424 ZOrov0x2e(%esp),%eax8048b9f:89 0424fOV%eaxj(%esp)8048ba2:eS 23
12、05 00 00call83490ca<strings_not_equal>aa4flba7:85 COtst8d48ba9:74 05je<phase_l+Ox20>8048bab:es 2505 00 03call80491d5 <explode_bonb>8048bbo:83 c4lcadd$Qxlc esp8048bb3:C3ret從上面的語句可以看出 <strings_not_equal> 所需要的兩個變量是存在于ebp所指的堆棧存儲單元里,在 main函數(shù)中:8048acf:e8 78 07 00 0Gcall804924c <
13、read_llne>8048ad4:89 04 24Fiov9fieax, (Sfiesp)得知eax里存儲的是調(diào)用read_line()函數(shù)后返回的結(jié)果,就是輸入的字符串,所以得知和用戶輸入字符串比較的字符串的存儲地址為0x804a204,可用gdb查看這個地址存儲的數(shù)據(jù)內(nèi)容:tang live luting;一川W01414gl30K(3Be4Eat*e 104 tn /utr/trielude/tjs& -llrux-gnu/bits /stdl4z.h "dbj nHetsne to ny fiendish Uttle bom|>. Vcm have ti
14、 phases with oxe804Sdc3 tn prtoef (nt»<op c t nt zed out>)t /usr/tntlude/l3S6 ItnuK - f)nu/blts/stdta2. h rltM104 in /us r/tnclude/tlSG - llnu)t-gnu/btt / stdt oi . h IgdbJ nixfl8048at:j 101 in /jsr/iniclude/iJ86-lirujt-gnu/bit5/stdio2*h tgdb) nrthtch to blow ycwrielf up. Have nice ddy! i
15、atn (argc=l4 argv»oxffffdlb4) at bonb,c:73 73input - rad_line();/* Get Input(gdb) ni miiniini.74phjjst_l( Input);(gdb) X/26KArgiawent equtrH (startingKun the phase(gdb)力Mm“B84a214: 3K004224:Ax26054554®3C002e776fdisplay Address).&k7577566 0j£657474fi5QM21776f5797770657?BM6f7420720M
16、7Sfif5926SkZ06c6cX72726ri6d 0X2065715279X0643234: 9X0043244:CM) I6X75&665M ttx73267465&K2064&5730Kt5>67&lZ43X2 &6 560 749x642seezi0X726J&573exze632520翻譯過后的結(jié)果為 The future will be better tomorrow.4 .實(shí)驗(yàn)結(jié)果:tangliwel0>e£tlng: "/UZ01414313tangltwetgesting:-$ cd U291
17、41481S/tangLtwetesting:/U2014148135 x/bombWelcone to ny fiendish tittle bomb, You have 6 phases with which to blow yourself up. Have a nice day! The future will be better tomorrowi Phase 1 defused. Ho網(wǎng) about the next one?可見結(jié)果正確。階段2循環(huán)1 .任務(wù)描述:完成炸彈2的拆除2 .實(shí)驗(yàn)設(shè)計(jì):觀察分析phase_2代碼,使用gdb調(diào)試分析結(jié)果3 .實(shí)驗(yàn)過程:找到phase_2代
18、碼:48bb4 <phase_2>:pushKesi804Bbb5;53push%ebx8048bt>C:S3 ec 54sub0X34.xesp8O8bb9:8d 44 24 18leaOxlB(%esp)1%eaxgCMRbbd:S9 44 24 04moveax/QxdCXesp)aoabcl:Sb 44 24 4Gnew0x4O(%C£p)8048bcS:89 04 24FIOV%edx >(拓usp)a048bcS:eg 2f 白6 &0 06匚dIL83491tc <read stx nuPibers>8Q48bcd:83 7C
19、 24 18 00匚叩I$0x0 P0xl8C%esp)8®48bd2:75 07jne8548bdb phase_2+0x278。48bd4:B3 7c 24 1C 01CHpl$3x1.OxlcCMesp)8048bd9:74 IfJe8940bfa phase 2+ox46>8048bdb:e8 f5 05 00 06callBB491d5 <explode bonb>S048b&6:eb 18>p8048bfa <phas?_?4-£»x46>a白b 43 fanov-0x8(%ebx)jKeax8O48be5:
20、93 43 fcadd-Q?c4(%ebx),%eax8848bM:39 03匚叩(*ebx)8O8bea:74 05je8348bfl <phase_2+0x3d>8048bec:e4 05 &0 0GcallS9491dS <explode_bomb>904ebfl:B3 c3 04dd$0x4 jMebx&048bf4:39 f3匚Pipwesl>sebxaO48bfe;75 eajne894SbeZ <phase_2+0xe>Sf)48bf8:eb BfMpR34firE)4 <phase_2+0x56>SOSbfa
21、:8d Sc 24 20leaSx28(Mesp)fKebx8G48bfe:Bd 74 24 30lea0K30(%e5p)jXesi8O48C&2:eb deMP8348Mz <phase_z+oxze>8O48C04: 83 C4 M8Q4flc&7t Sb 898c&87 5e 3O48c09; Caddpop pop ret$Hx34,Kesp%ebx由read_six_numbers知是要輸入6個數(shù)字,觀察:8048bcdl83 7C 24 18 00cnpl$0x0,0xlfi(Kesp)8048bd2:75 97jne804Sbdb <p
22、hase_2+0x27>8048bd4:83 7c 24 1c 01cnpl$0x1 jdxlc(祀寫 p)8。48bd9:74 Ifje8048bfa <phase_2+9x468048bdb:e8 f5 第 00 00可知輸入的個和第二個必須依次為0,1call8呂491d5 <explode_bomb>8048bfa:8d SC 24 20leaQx20(%esp)F%ebx8048bfe:8d 74 24 30lea0x39(%esp)F%esi8048C92:eb dejnp8048be2 <phase_2+0x2e>8048be2:8b 43 f
23、8nov-0x8(ebx),%eax8648beSr03 43 fcadd-0x4(ftebx)F%eax304Sbe8:39 03CFip%e5x f(%ebx)804Sbea:74 OSjeB04Bbfl <phase_2+0x3d>觀察這兩個循環(huán)可知只有當(dāng)輸入的數(shù)為前兩個數(shù)之和時才不會bomb,故得到序列0,1,1,2,3,54 .實(shí)驗(yàn)結(jié)果:輸入上述序列后得:tangUwei)e£tlng! "/U201414813tangliweiesttng:-/U201414Q13$ ./bonbWelcome to ny fiendish little bomb*
24、 You have 6 phases with which to blow yourself up. Have a nice day!The future will be better tomorraw*Phase 1 defused. How about the next one?0 112 3 5That*s number 2* Keep going!可知結(jié)果正確階段3條件/分支1 .任務(wù)描述:完成炸彈3的拆除2 .實(shí)驗(yàn)設(shè)計(jì):觀察分析phase_3代碼,使用gdb調(diào)試分析結(jié)果3 .實(shí)驗(yàn)過程:找到phase_3代碼如下:08048c0a <phase_3>:8048c0a:83
25、ec 3csub $0x3c,%esp8048c0d:8d 44 24 2clea 0x2c(%esp),%eax8048c11:89 44 24 10mov %eax,0x10(%esp)8048c15:8d 44 24 27lea 0x27(%esp),%eax8048c19:89 44 24 0cmov %eax,0xc(%esp)8048c1d:8d 44 24 28lea 0x28(%esp),%eax8048c21:89 44 24 08mov %eax,0x8(%esp)8048c25:c7 44 24 04 4e a2 04movl $0x804a24e,0x4(%esp)由此
26、行代碼查看輸入內(nèi)容:(gdb) x/s 6x804a24e0x804a24e:5d %c可知輸入的依次是數(shù)字、字符、數(shù)字8048c43:83 7c 24 28 07cmpl $0x7,0x28(%esp)8048c48:0f 87 f5 00 00 00ja 8048d43 <phase_3+0x139>8048d43:e8 8d 04 00 00call 80491d5 <explode_bomb>可見輸入的第一個數(shù)一定小于78048c4e:8b 44 24 28mov 0x28(%esp),%eax3.實(shí)驗(yàn)過程:jmp *0x804a260(,%eax,4)8048
27、c52:ff 24 85 60 a2 04 08假設(shè)輸入的第一個數(shù)為 0,即(32刈=0,所以:(gdb) p/x *ex80a260$4 = OX8O48C598048c59:b8 76 00 00 00mov $0x76,%eax8048c5e:81 7c 24 2c 04 01 00cmpl $0x104,0x2c(%esp)所以第二個字符 ascll碼為0x76,即字符'v'而第三個數(shù)為 0x104,即2604 .實(shí)驗(yàn)結(jié)果:tangliwei0esttng:*;U2.&1414813S ./bomb ans.txtwelcone1 to ey ftendtsh
28、little bomb, Vou have 6withwhich to blow yourself up* Have a nice day!Phase 1 defused. How about the next one?Thatfs number 2. Keep going!o v 268Halfway there!從實(shí)驗(yàn)結(jié)果來看結(jié)果正確,拆彈成功。階段4遞歸調(diào)用和棧1 .任務(wù)描述:拆除炸彈42 .實(shí)驗(yàn)設(shè)計(jì):觀察分析phase_4代碼,使用gdb調(diào)試分析結(jié)果08048db9 <phase_4>B。48db9:8048dbc:83 ec 2c8d 44 24 1Csub lea$0x
29、2c,%esp Oxlc(%esp)8048dcfl;S9 44 24 EICM 0廿,Gxc(%esp)&048dc4:8d 44 24 ISlea0xl8(%esp) ,?eax8048dc8:89 44 Z4 08nov%eax tOx8(%esp)8048dcc:C7 44 24 04 cf04novt$9x804a3cf,0x4(%esp)81348dd3:08用x/sb 0x804a3cf 來查詢有幾個輸入以及輸入的類型,如下所示:(gdb) x/sb 6x884a3cfpx804«3cf:"%d %dqdb),804Sel2:837c24ICif8O4
30、8el7;74058S48C19:e8b70300B048ele;83C42C804&e21:C3再由phase_4中:知道func4第二個參數(shù)值為1f,即37由此可見輸入是兩個整數(shù)cmpl$0xlffOxlc(%esp)je8048ele <phase_4+0xCallS0491J5 <explode_boradd$0xZc,?6espret再仔細(xì)研究func4函數(shù),發(fā)現(xiàn)其實(shí)現(xiàn)了遞歸調(diào)用:08048d5c <func4>:8048d5c:56push%esi8048d5d:53push%ebx8048d5e:83 ec 14sub$0x14,%esp8048d
31、61:8b 54 24 20mov0x20(%esp),%edx /ebx是傳遞的參數(shù) /8048d65:8b 44 24 24mov0x24(%esp),%eax8048d69:8b 74 24 28mov0x28(%esp),%esi8048d6d:89 flmov%esi,%ecx8048d6f:29 c1sub%eax,%ecx8048d71:89 cbmov%ecx,%ebx8048d73:c1 eb 1fshr$0x1f,%ebx / ebx右移 31 位 /8048d76:01 d9add%ebx,%ecx8048d78:d1 f9sar%ecx8048d7a:8d 1c 01l
32、ea(%ecx,%eax,1),%ebx8048d7d:39 d3cmp%edx,%ebx8048d7f:7e 17jle8048d98 <func4+0x3c>8048d81:8d 4b fflea-0x1(%ebx),%ecx8048d84:89 4c 24 08mov%ecx,0x8(%esp)8048d88:89 44 24 04mov%eax,0x4(%esp)8048d8c:89 14 24mov%edx,(%esp)8048d8f:e8 c8 ff ff ffcall8048d5c <func4>8048d94:01 d8add%ebx,%eax8048d
33、96:eb 1bjmp8048db3 <func4+0x57>8048d98:89 d8mov%ebx,%eax8048d9a:39 d3cmp%edx,%ebx8048d9c:7d 15jge8048db3 <func4+0x57>8048d9e:89 74 24 08mov%esi,0x8(%esp)8048da2:8d 43 01lea0x1(%ebx),%eax8048da5:89 44 24 04mov%eax,0x4(%esp)8048da9:89 14 24mov%edx,(%esp)8048dac:e8 ab ff ff ffcall8048d5c &l
34、t;func4>8048db1:01 d8add%ebx,%eax8048db3:83 c4 14add$0x14,%esp8048db6:5bpop%ebx8048db7:5epop%esi8048db8:c3ret下面就來剖析func4 ,這個函數(shù)在確定棧之后,首先取出來傳遞給它的參數(shù),依次放在 eax,edx,esi. 中,從一個jle 和一個 jge 可以看出,這個遞歸函數(shù)跳出的條件根據(jù)func4的第二個參數(shù)和第二個參數(shù)進(jìn)過種種運(yùn)算的結(jié)果等于第一個 參數(shù)即可。注意在遞歸過程中第一個參數(shù)是不變的,最后返回值是經(jīng)過運(yùn)算后的 ebx加上第一個參數(shù)。當(dāng)時做實(shí)驗(yàn)時推出了具體的表達(dá)式,未記錄
35、下來,只記錄 了最后得出fun(11)=31 。運(yùn)行結(jié)果如下:tarkgliweiestlrkg: "/lab2tangliwetesting:cdtangUwct3esting:-/lab2$ ,/bonb C51405_U蟲 1414B13_唐孔麻e to ny fiendish little bonb. You ft phases with khich to blow yourself up. Have a nice day!Phase 1 defused. Uchi about the next one?That's number Keep going IHalfwa
36、y there J13 31So you gat that one. Try this onetangllwelestlngr */labztangliweiestlng:cd 13tl2tsglAwui®”,/borb ans, txtwelcone to Fy fiendish little bomb, You have 5 phases with which to bion yourself up. Have a nice dayl Phase 1 defused. How about the next one?That's nunber 2. Keep going 1
37、 Halfway there!5t> you 90t that one. Try this one.由此可見,phase_4拆除成功!4.實(shí)驗(yàn)結(jié)果:給出階段x的實(shí)驗(yàn)結(jié)果和必要的結(jié)果分析階段 5 phase_51 .任務(wù)描述:拆除一個關(guān)于指針的炸彈。2 .實(shí)驗(yàn)設(shè)計(jì):此階段實(shí)驗(yàn)與指針相關(guān),又根據(jù)靜態(tài)調(diào)試跟蹤可知,需借助gdb的動態(tài)調(diào)試跟蹤來查找相關(guān)地址中存放的數(shù)據(jù)的值,進(jìn)而分析出最終的拆彈密碼。首先觀察代碼,分析代碼時發(fā)現(xiàn)有多個跳轉(zhuǎn)指令,具體為x>15時,bomb;x>=1時,取x低4位;tpheise_S>:0O48C25:83 ec 2c 8d 44 24 1Csub
38、leaElxlcClKespJfXeaKB04fle29:89 44 24 OcnoyNcax*Oxc(%esp)0G18c2di8d 44 24 IBLeo0xJ8(%esp)B«4Be31i89 44 24 aSnovHraxKBCXesp)eei8e35ic7 4。 24 cf ai 04novi%C5p)088b 44 24 3QnovM4Be41:89 M 24nov華營自工,(Wesp)gqBWU:ea 17 fd rr rrcallBO48SO0 r_tsoc99_i;scanfplt>B04Be49:8學(xué) re bi亡Hip$0x17%e<ix7f 05J
39、98048e5B tphdse_S+Ox31j0648t?*le:S2 05 00 06callB0491J5 texploJe bcmbj804Be53:8b 44 24 16movexlB(%esp),Seax3G4ae57;83 C0 OfandSDxfjVeaxB04Be5a:&9 44 24 16novJicax.OxlSfesp)BD4Be5e:83 f0 Ofcnp$BxfjKeax口maacMi*7JL >>彳小a向11tl0代a內(nèi) ch重亡修 匚4代*篇人、使用gdb調(diào)試發(fā)現(xiàn),要輸入的是兩個d數(shù)。由后面的步驟知輸入第一個數(shù)為初 始數(shù)組下標(biāo),第二個數(shù)為循環(huán)1
40、5次累加求的和。再接著:8048e70: 8b 04 85 80 a2 04 08mov 0x804a280(,%eax,4),%eax,這句就是從(0x804a280+eax*4)里面拿數(shù)據(jù)出來,加到 eax上8048eDJ:b9 DO 00OU 00FlOVSaxo#xecx8048eG8;ba 00 0009 OGFlOV$0nO,Seds8O48e6d:33 cZ 01dddSO4Be70:8b Q4 SSSO a2 64 6SFlOVQx834a239(t%eax h 4)KeaxRfi4fie77rf»1 cladd因?yàn)閑ax只能是0F的數(shù),所以0x804a260這個地址
41、里面存的應(yīng)該是一個數(shù)據(jù)大小為16的數(shù)組,用gdb看,得到:觀察到果然是一個數(shù)組,然后下面就是把5個輸入對應(yīng)ascll碼的低4位轉(zhuǎn)換的ecx。十進(jìn)制數(shù)對應(yīng)的數(shù)值一個一個的轉(zhuǎn)化為這個數(shù)組,得到累加值(gdb) p *0xSQ4a29O1651 = <10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 1工 39, 6, 5觀察循環(huán)部分:8048e5a: 8048e5e: 8048e&l:8048e63:8048e68:9649e5d:8048e70:8048677:8048e79:8G48e7c:8048e7e:8O40e82:8Q4Se85: 8048e87
42、: 8648e8b:3048e8d:8Q48e92:9 3 4 9 3 3b8 8 7 b b 8 8135 935b4830878873 7 e818f4 36 C534Cf e4fo4o4 c4 f 0 0 15 f2-® 9 0 0-8- 08 o40o 0 2 0 0a 0 0 0 0 0 88 c 01- 1 o4 f 4 3 c2- 0 2 0 2movXeaxOxlsCXesp)cnp$0xf eaxJe8048e8d <phase_5+0x6b>nov$OxO,ecxmov$9x0,?fiedxadd$0xl>9Sedxnov0x804a28Q(,%
43、eaf4),%ea>add%eax,ecxcnp$0xf eaxjne8048e6d <phase_5+0x4b>nov%eax,0xl8(%esp)cnp$Oxf,%edxjne8048eBd <phase_5+9x6t»cnpOxlc(SSesp) ,%ecxje8048e92 <phase_5+Ox70>call8。491d5 <explode_boi,ib>add$0x2c,%esp由此知當(dāng)退出循環(huán)的條件是取出的數(shù)eax為15,而且循環(huán)次數(shù)為15次由于 115=12+3+7+11+13+9+4+8+10+1+2+14+6+15=
44、a(5)+a(12)+a(6)最后得到的ecx值是115,輸入的初始數(shù)組下標(biāo)為5。所以答案為:5 1154.實(shí)驗(yàn)結(jié)果:tangliwelestlng:/Lab2$ /bomb ans-txtHelcone to ny fierdish little bonb. You have 6 phases with which to blow yourself up. Have a nice day!Phase 1 defused . How about the next one?That'5 number 2+ Keep going!Halfway there!So you got that
45、onet Try this one.Good work! On to the next*.可知結(jié)果正確。階段 6 phase_61 .任務(wù)描述:拆除一個關(guān)于鏈表/指針/結(jié)構(gòu)的炸彈。2 .實(shí)驗(yàn)設(shè)計(jì):初步靜態(tài)分析,此階段代碼有些過長,所以單純通過靜態(tài)調(diào)試跟蹤有些困難, 因此我首先找到幾個循環(huán)體,通過靜態(tài)調(diào)試跟蹤和動態(tài)調(diào)試跟蹤的方法來確認(rèn)循 環(huán)體的功能,最后將循環(huán)體結(jié)合起來,拆除此階段炸斷。3 .實(shí)驗(yàn)過程:由于代碼較長,為便于分析,先總結(jié)一下,phase_6分為:參數(shù)讀取,一個 雙層循環(huán),三個單層循環(huán)。首先是參數(shù)讀?。篲6>:S&pU5hwestEg 肥9了:53push%ebx504
46、8e98;S3et44sub$0x4,espBd442410lea£esp),觀ax69442404navj 0x4(liep)ah4424彳口novE»C 5i0( KE弓 p) .YBdX6048cdT;699424nov除己跖f依$ 口 S&Q4Sead;eS4dQGeotall30491fc v之日d six mjnbers>&049eat:be03ae06eonou$0x0jKesiHH4Meb4:Hh44b416nauDjclO(Xesp,esip4)JKeaxRfUHebs:83eB81sub汕xl /Jeax63fa65Sp5白跋m*S
47、048ebe;7635jbe304Sec5 phase 6+0x2f>eS1063QGeocall9©491<15 cexplode bombs-由此可見,readsix_number所有參數(shù)均小于6且不相等。由于后面代碼部分過多,便采用 gdb單步執(zhí)行來了解代碼的功能。在此,觀察到后面:S01S«fb:ba 3c cl 04 09nov0048(00:89 54 b4 28nov%edxtOKZa(«eip,%eslF4)可以看到輸入六個數(shù)字的初始地址值在0x804c13c,再由for循環(huán)中:8048ebf: 8b 52 08mov 0x8(%edx
48、),%edx可以看出六個數(shù)字按8個字節(jié)的順序進(jìn)行排列,因此分別調(diào)用gdb查看(0x804c13c)、*(0x804c13c+0x8)、*(*(0x804c13c+0x8)+0x8)、*(*(*(0x804c13c+0x8)+0x8)+0x8)*(*(*(*(0x804c13c+0x8)+0x8)+0x8)+0x8)*(*(*(*(*(0x804c13c+0x8)+0x8)+0x8)+0x8)+0x8)的值即可。如圖所示:Thero Is NO WARRANT?, to the extent permitted by law. and "忘how warrantyfor details
49、 .This GDB was ennfi gured as NxB6_64-Linux - gnuType "show configuration“ for configurattor details*For bug reporting instructions, please see: <http:/www.gnu. org/st>ftware/gdb/bugs/>.Find the GDB manual and other documentatiofi resourcesType "shorj copyingonline at:<http:/ww
50、w. gnu . org/saftwa re/gdb/documentation.For help, type "help"*Type "apropos v«ord,r to search for connands related Reading synbcts fron bonb + + .done»(gdb) k/3k Ox8G4cl3c)0x004cl3c wnodel4二(gdb) x"x *(Bx8B4cl3c+Bxfi)0x804cl48 <node2>:0x00000385oxeecioooez0X0604C
51、1S4(gdb) x/3x *(*(0x804cl3c+0xfl)+0x8)0x804cl54 4node3>:0x600000010X0SO4C16O(gdb) X/3X *(*(*(0x801cl3c+exS)+6x8)+0x8)0x804cl6e <node4>:OxQGOB03db0x000000040x0304c16c(gdb) )t/X *(*(*(*(gx3O4C13t+tJX0)+OXB)OXB)+X8)0x304cl6c <node5:OxOeOOOQ7e0x00000005OxOe04cl78(gdb) x/3x +(*(+(+(*(ox304cl3
52、ci0x0)*0x8)tOxOjtOxa)*0x8)0xSG4cl7a <ncde6>: fndh) 0x066003089x0GG93G0G在下面檢測鏈表值時,要求鏈表值從大到小排列。由上圖可以看出,鏈表原本各個位置的值按順序排列位:292 385 c6 3db 7e 308 。按從小到大順序排列應(yīng)該為:7e c6 292 308 385 3db 。由此可以看出,用戶應(yīng)該輸入:5 3 1 624 。4 .實(shí)驗(yàn)結(jié)果:0 £ tanglfwel>estlng; "/lab2:angliweie&ttng:cd tab?:angliwetesttng:
53、/lab2$ ,/bonb ans * txtJelcome to my fiendish little bombi You have 6 phases with,hich to blow yourself up. Have a nice day J*hase 1 defused. How about the next one?hatfs nunber 2. Keep going!lalfway there!io you got that one. Try this one.ood work> On to the next.ongratulations! You've defus
54、ed the bomb!:angltwetesttng: /lab25 |可見結(jié)果正確。實(shí)驗(yàn)小結(jié)本次實(shí)驗(yàn)熟悉了 obj、gdb的各種操作,對數(shù)據(jù)在計(jì)算機(jī)中的存儲有了更加 清晰的認(rèn)識,更加加深了對匯編代碼的理解,對循環(huán)、分支、數(shù)組指針結(jié)構(gòu)在機(jī) 器內(nèi)部的存儲有了更深刻的認(rèn)識。實(shí)驗(yàn)3:緩沖區(qū)溢出攻擊實(shí)驗(yàn)概述本實(shí)驗(yàn)的目的在于加深對IA-32函數(shù)調(diào)用規(guī)則和棧結(jié)構(gòu)的具體理解。實(shí)驗(yàn)的 主要內(nèi)容是對一個可執(zhí)行程序“ bufbomb”實(shí)施一系列緩沖區(qū)溢出攻擊(buffer overflow attacks ),也就是設(shè)法通過造成緩沖區(qū)溢出來改變該可執(zhí)行程序的運(yùn) 行內(nèi)存映像,繼而執(zhí)行一些原來程序中沒有的行為,例如將給定
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年四年級英語下冊 Unit 3 What can you see第2課時說課稿 湘少版
- 7《美麗的化學(xué)變化》說課稿-2023-2024學(xué)年科學(xué)六年級下冊教科版
- 2025計(jì)算機(jī)購銷合同樣書
- 2025勞動合同法課程學(xué)習(xí)指南
- 2024年高中化學(xué) 專題3 常見的烴 第一單元 第1課時 脂肪烴的類別、烷烴說課稿 蘇教版選修5001
- 2憲法是根本法 第一課時 感受憲法日(說課稿)-部編版道德與法治六年級上冊
- 醫(yī)療試劑合同范例
- 包工項(xiàng)目合同范本
- 化妝店加盟合同范例
- 2024-2025學(xué)年高中地理 第二章 區(qū)域可持續(xù)發(fā)展 2.4 農(nóng)業(yè)的可持續(xù)發(fā)展-以美國為例說課稿 湘教版必修3
- 寧波2025年浙江寧波市鄞州區(qū)衛(wèi)健系統(tǒng)其他事業(yè)單位招聘事業(yè)編制46人筆試歷年參考題庫附帶答案詳解
- 【七上HK數(shù)學(xué)】安徽省蚌埠市固鎮(zhèn)縣2024-2025學(xué)年七年級上學(xué)期1月期末試卷數(shù)學(xué)試題
- 電信網(wǎng)和互聯(lián)網(wǎng)圖像篡改檢測技術(shù)要求與測試方法
- 2025屆江蘇省南京市鹽城市高三一??荚囌Z文試題 課件
- 《水稻生長進(jìn)程》課件
- 2024版企業(yè)高管職務(wù)任命書3篇
- 青少年鑄牢中華民族共同體意識路徑研究
- 江蘇省南京市2024年中考英語試題(含解析)
- 學(xué)校農(nóng)業(yè)教育體驗(yàn)項(xiàng)目方案
- 水利工程施工監(jiān)理規(guī)范(SL288-2014)用表填表說明及示例
- 部編版2023-2024學(xué)年六年級上冊語文期末測試試卷(含答案)
評論
0/150
提交評論