华中科技大学计算机系统基础试验报告_第1页
华中科技大学计算机系统基础试验报告_第2页
华中科技大学计算机系统基础试验报告_第3页
华中科技大学计算机系统基础试验报告_第4页
华中科技大学计算机系统基础试验报告_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、等中科技火孚课程实验报告课程名称:计算机系统基础计算机科学与技术学院目录错误 !错误 !错误 !实验1: 实验 2 实验 3 实验总结错误!未定义书签。实验1:数据表示实验概述本实验的目的是更好地熟悉和掌握计算机中整数和浮点数的二进制编码表 示。实验中,你需要解开一系列编程“难题”一一使用有限类型和数量的运算操 作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了 解。实验语言:c;实验环境:linux实验内容需要完成 中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操 作。实验设计源码如下:/* 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);实验过程编写源码,运行btest ,得出实验结果实验结果 tanglhveiestlng: -/tangll weltangliwetesting:cd tangli wet/ tangltwelesttng:-/tangli wei$ ./btestScoreRatingErrorsFunctio

8、n110Isbzero220byteNot220byteXor330logicalAnd330logicalOr1 330rotateLeft440paritycheck220mulZOK220nult3dtv2330subOK440absVal220flost_abs440flodtlf21Totalpoints:35/35tangltwetesttng:-/tangli wet$ I可见13个函数全部正确实验小结此次实验主要考查的是对数据的处理,对此需要掌握数据在机器中的表示, 运用合理的位运算来实现相应的功能实验 2: Binary Bombs实验概述本实验中,你要使用课程所学知识拆除一

9、个" binary bombS'来增强对程序 的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。一个"binary bombs" (二进制炸弹,下文将简称为炸弹)是一个 Linux 可执行C程序,包含了 6个阶段(phase1phase6)。炸弹运行的每个阶段要求你 输入一个特定的字符串,若你的输入符合程序预期的输入,该阶段的炸弹就被“拆除”,否则炸弹“爆炸”并打印输出"BOOM!”字样。实验的目标是拆除尽 可能多的炸弹层次。每个炸弹阶段考察了机器级语言程序的一个不同方面,难度逐级递增:* 阶段1:字符串比较* 阶段2:循环* 阶段

10、3:条件/分支* 阶段4:递归调用和栈* 阶段5:指针* 阶段6:链表/指针/结构另外还有一个隐藏阶段,但只有当你在第4阶段的解之后附加一特定字符串 后才会出现。为了完成二进制炸弹拆除任务,你需要使用gdb调试器和objdump来反汇编 炸弹的可执行文件,并单步跟踪调试每一阶段的机器代码, 从中理解每一汇编语 言代码的行为或作用,进而设法“推断”出拆除炸弹所需的目标字符串。 这可能 需要你在每一阶段的开始代码前和引爆炸弹的函数前设置断点,以便于调试。实验语言:C语言实验环境:linux实验内容反汇编bomb得到汇编代码,根据汇编代码完成拆炸弹任务。阶段1字符串比较1 .任务描述:找到与输入的字

11、符串进行比较的存储的字符串的首地址,进而得到存储的字符用,得到结果。2 .实验设计:根据反汇编代码一步一步分析,具体见实验过程。3 .实验过程:将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函数中:8048acf:e8 78 07 00 0Gcall804924c <

13、read_llne>8048ad4:89 04 24Fiov9fieax, (Sfiesp)得知eax里存储的是调用read_line()函数后返回的结果,就是输入的字符串,所以得知和用户输入字符串比较的字符串的存储地址为0x804a204,可用gdb查看这个地址存储的数据内容: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翻译过后的结果为 The future will be better tomorrow.4 .实验结果: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网 about the next one?可见结果正确。阶段2循环1 .任务描述:完成炸弹2的拆除2 .实验设计:观察分析phase_2代码,使用gdb调试分析结果3.实验过程:找到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:9

20、3 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个数字,观察:8048bcdl83 7C 24 18 00cnpl$0x0,0xlfi(Kesp)8048bd2:75 97jne804Sbdb <ph

22、ase_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 f8

23、nov-0x8(ebx),%eax8648beSr03 43 fcadd-0x4(ftebx)F%eax304Sbe8:39 03CFip%e5x f(%ebx)804Sbea:74 OSjeB04Bbfl <phase_2+0x3d>观察这两个循环可知只有当输入的数为前两个数之和时才不会bomb,故得到序列0,1,1,2,3,54.实验结果:输入上述序列后得:tangUwei)e£tlng! "/U201414813tangliweiesttng:-/U201414Q13$ ./bonbWelcome to ny fiendish little bomb* Y

24、ou 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!可知结果正确阶段3条件/分支1 .任务描述:完成炸弹3的拆除2 .实验设计:观察分析phase_3代码,使用gdb调试分析结果3 .实验过程:找到phase_3代码如下:08048c0a <phase_3>:8048c0a:83 ec

25、 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、码查看输入内容:(gdb) x/s 6x804a24e0x804a24e:5d %c可知输入的依次是数字、字符、数字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>可见输入的第一个数一定小于78048c4e:8b 44 24 28mov 0x28(%esp),%eax3.实验过程:jmp *0x804a260(,%eax,4)8048c5

27、2:ff 24 85 60 a2 04 08假设输入的第一个数为 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'而第三个数为 0x104,即2604 .实验结果:tangliwei0esttng:*;U2.&1414813S ./bomb ans.txtwelcone1 to ey ftendtsh li

28、ttle 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!从实验结果来看结果正确,拆弹成功。阶段4递归调用和栈1 .任务描述:拆除炸弹42 .实验设计:观察分析phase_4代码,使用gdb调试分析结果08048db9 <phase_4>B。48db9:8048dbc:83 ec 2c8d 44 24 1Csub lea$0x2c

29、,%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:837c24ICif8O48e

30、l7;74058S48C19:e8b70300B048ele;83C42C804&e21:C3再由phase_4中:知道func4第二个参数值为1f,即37由此可见输入是两个整数cmpl$0xlffOxlc(%esp)je8048ele <phase_4+0xCallS0491J5 <explode_boradd$0xZc,?6espret再仔细研究func4函数,发现其实现了递归调用:08048d5c <func4>:8048d5c:56push%esi8048d5d:53push%ebx8048d5e:83 ec 14sub$0x14,%esp8048d61

31、:8b 54 24 20mov0x20(%esp),%edx /ebx是传递的参数 /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 01lea

32、(%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,%eax8048d96

33、: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 <

34、func4>8048db1:01 d8add%ebx,%eax8048db3:83 c4 14add$0x14,%esp8048db6:5bpop%ebx8048db7:5epop%esi8048db8:c3ret下面就来剖析func4 ,这个函数在确定栈之后,首先取出来传递给它的参数,依次放在 eax,edx,esi. 中,从一个jle 和一个 jge 可以看出,这个递归函数跳出的条件根据func4的第二个参数和第二个参数进过种种运算的结果等于第一个 参数即可。注意在递归过程中第一个参数是不变的,最后返回值是经过运算后的 ebx加上第一个参数。当时做实验时推出了具体的表达式,未记录下来

35、,只记录 了最后得出fun(11)=31 。运行结果如下: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 IHalfway

36、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 H

37、alfway there!5t> you 90t that one. Try this one.由此可见,phase_4拆除成功!4.实验结果:给出阶段x的实验结果和必要的结果分析阶段 5 phase_51 .任务描述:拆除一个关于指针的炸弹。2 .实验设计:此阶段实验与指针相关,又根据静态调试跟踪可知,需借助gdb的动态调试跟踪来查找相关地址中存放的数据的值,进而分析出最终的拆弹密码。首先观察代码,分析代码时发现有多个跳转指令,具体为x>15时,bomb;x>=1时,取x低4位;tpheise_S>:0O48C25:83 ec 2c 8d 44 24 1Csub le

38、aElxlcClKespJfXeaKB04fle29: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学 re bi亡Hip$0x17%e<ix7f 05J98

39、048e5B 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内 ch重亡修 匚4代*篇人、使用gdb调试发现,要输入的是两个d数。由后面的步骤知输入第一个数为初 始数组下标,第二个数为循环15次

40、累加求的和。再接着:8048e70: 8b 04 85 80 a2 04 08mov 0x804a280(,%eax,4),%eax,这句就是从(0x804a280+eax*4)里面拿数据出来,加到 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因为eax只能是0F的数,所以0x804a260这个地址里面

41、存的应该是一个数据大小为16的数组,用gdb看,得到:观察到果然是一个数组,然后下面就是把5个输入对应ascll码的低4位转换的ecx。十进制数对应的数值一个一个的转化为这个数组,得到累加值(gdb) p *0xSQ4a29O1651 = <10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 1工 39, 6, 5观察循环部分: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(,%ea

43、f4),%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由此知当退出循环的条件是取出的数eax为15,而且循环次数为15次由于 115=12+3+7+11+13+9+4+8+10+1+2+14+6+15=a(

44、5)+a(12)+a(6)最后得到的ecx值是115,输入的初始数组下标为5。所以答案为:5 1154.实验结果: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 on

45、et Try this one.Good work! On to the next*.可知结果正确。阶段 6 phase_61 .任务描述:拆除一个关于链表/指针/结构的炸弹。2 .实验设计:初步静态分析,此阶段代码有些过长,所以单纯通过静态调试跟踪有些困难, 因此我首先找到几个循环体,通过静态调试跟踪和动态调试跟踪的方法来确认循 环体的功能,最后将循环体结合起来,拆除此阶段炸断。3 .实验过程:由于代码较长,为便于分析,先总结一下,phase_6分为:参数读取,一个 双层循环,三个单层循环。首先是参数读取:_6>:S&pU5hwestEg 肥9了:53push%ebx5048e

46、98;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*S04

47、8ebe;7635jbe304Sec5 phase 6+0x2f>eS1063QGeocall9©491<15 cexplode bombs-由此可见,readsix_number所有参数均小于6且不相等。由于后面代码部分过多,便采用 gdb单步执行来了解代码的功能。在此,观察到后面:S01S«fb:ba 3c cl 04 09nov0048(00:89 54 b4 28nov%edxtOKZa(«eip,%eslF4)可以看到输入六个数字的初始地址值在0x804c13c,再由for循环中:8048ebf: 8b 52 08mov 0x8(%edx),

48、%edx可以看出六个数字按8个字节的顺序进行排列,因此分别调用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:/www.

50、 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>:0x00000385oxeecioooez0X0604C1S

51、4(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 +(*(+(+(*(ox304cl3ci

52、0x0)*0x8)tOxOjtOxa)*0x8)0xSG4cl7a <ncde6>: fndh) 0x066003089x0GG93G0G在下面检测链表值时,要求链表值从大到小排列。由上图可以看出,链表原本各个位置的值按顺序排列位:292 385 c6 3db 7e 308 。按从小到大顺序排列应该为:7e c6 292 308 385 3db 。由此可以看出,用户应该输入:5 3 1 624 。4 .实验结果:0 £ tanglfwel>estlng; "/lab2:angliweie&ttng:cd tab?:angliwetesttng:/l

53、ab2$ ,/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 defused

54、 the bomb!:angltwetesttng: /lab25 |可见结果正确。实验小结本次实验熟悉了 obj、gdb的各种操作,对数据在计算机中的存储有了更加 清晰的认识,更加加深了对汇编代码的理解,对循环、分支、数组指针结构在机 器内部的存储有了更深刻的认识。实验3:缓冲区溢出攻击实验概述本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解。实验的 主要内容是对一个可执行程序“ bufbomb”实施一系列缓冲区溢出攻击(buffer overflow attacks ),也就是设法通过造成缓冲区溢出来改变该可执行程序的运 行内存映像,继而执行一些原来程序中没有的行为,例如将给定的字节序列插入 到其本不应出现的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论