计算机系统实验三.docx_第1页
计算机系统实验三.docx_第2页
计算机系统实验三.docx_第3页
计算机系统实验三.docx_第4页
计算机系统实验三.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

计算机系统实验三一、 基本命令1、 设置断点:break *0x84602、 显示所有寄存器的值:i r a3、 打印某个寄存器的值:i r 寄存器4、 打印地址中的字符串:print (char *) *0x84845、 运行至下一个断点:c6、 打印内存值:x/6d 0xbee0573c二、 过程分析1、 phase_11) 确定结果形式8464:eb000241 bl8d70 根据这句话可知应输入一个字符串。2) 汇编结构分析8460:e59f101c ldrr1, pc, #28; 8484 8484:0006483c .word0x0006483c打印0x8484地址中的字符串推得结果为”Lets begin now!”3) 验证结果2、 phase_21) 确定结果形式84a4:eb0001f4 bl8c7c 根据这句话可知应输入6个数。2) 汇编结构分析根据以下语句可知此程序结构为一个循环体,循环次数为5。8524:e3530005 cmp r3, #58528:daffffe4 ble84c0 又根据循环前面的以下语句可知第一个数字应该是1。84ac:e3530001 cmp r3, #184b0:0a000000 beq84b8 84b4:eb000311 bl9100 循环体内部看起来是对堆栈的依次读取,打印r3寄存器里的地址的内容。84dc:e5933000 ldrr3, r3可知这是从内存中依次读取输入的数字,再根据下面的内容可知是与从内存读取的数据进行对比,若前面的不等于后面则爆炸。8508:e1520003 cmpr2, r3850c:0a000000 beq8514 8510:eb0002fa bl9100 3) 反推C程序代码根据以上分析得到C程序为: int list6 = read_six_numbers(); if (list0 != 1) explode_bomb(); for (int i = 1; i = 5; i+) if ( (i-1) * listi-1 != listi) explode_bomb(); 根据C程序可求得结果为1 0 0 0 0 0。4) 验证结果3、 phase_31) 确定结果形式8560:eb000976 blab40 8564:e1a03000 movr3, r08568:e3530002 cmp r3, #2 856c:ca000000 bgt8574 8570:eb0002e2 bl9100 要求输入的个数大于2,否则爆炸854c:e59f119c ldrr1, pc, #412; 86f0 86f0:00064850 .word0x00064850由图可知,输入的数据格式为:整数 字符 整数2) 汇编结构分析 8574:e51b3014 ldrr3, fp, #-20 8578:e3530007 cmp r3, #7 857c:979ff103 ldrls pc, pc, r3, lsl #2 8580:ea000041 b868c 由以上语句知输入的第一个数应小于等于7,之后pc根据第一个数的值跳转,猜测是switch语句。 8584:000085a4 .word0x000085a4 8588:000085c4 .word0x000085c4 858c:000085e0 .word0x000085e0 8590:00008600 .word0x00008600 8594:0000861c .word0x0000861c 8598:00008638 .word0x00008638 859c:00008658 .word0x00008658 85a0:00008670 .word0x00008670打印跳转表发现全部为phase_3内的地址,因此判定为switch语句。下面选择其中一种情况进行分析:85a4:e3a03071 movr3, #113; 0x71 /第一个数是0跳转至此85a8:e54b3005 strb r3, fp, #-5 /存储113作为比较的第二个数85ac:e51b200c ldr r2, fp, #-12 /输入的第三个数85b0:e59f313c ldr r3, pc, #316; 86f4 /存储777作为比较的第三个数(86f4:00000309 .word0x00000309 / 打印出是777)85b4:e1520003 cmp r2, r3 /要求r2=r3=777,第三个数匹配85b8:0a000037 beq 869c /跳到869c85bc:eb0002cf bl9100 / 若第三个数不匹配则爆炸 85c0:ea000042 b86d0 869c:e1a00000 nop; (mov r0, r0)86a0:ea00000a b86d0 /跳到86d086d0:e55b300d ldrb r3, fp, #-13 /输入的第二个数86d4:e55b2005 ldrb r2, fp, #-5 /r2=113,用于比较的第二个数86d8:e1520003 cmp r2, r3 /要求r2=r3,第二个数匹配86dc:0a000000 beq 86e4 86e0:eb000286 bl9100 / 若第二个数不匹配则爆炸将0x71转换成字符是q,因此答案为0 q 777。另外,需要注意的是:8658:e3a03076 movr3, #118; 0x76 /第一个数是6跳转至此865c:e54b3005 strb r3, fp, #-5 /存储用于比较的第二个数8660:e51b300c ldr r3, fp, #-12 /输入的第三个数8664:e3530fc3 cmp r3, #780; 0x30c /要求r3=780,第三个数匹配8668:0a000000 beq 8670 /跳到8670866c:eb0002a3 bl9100 8670:e3a03062 movr3, #98; 0x62 /第一个数是7跳转至此8674:e54b3005 strb r3, fp, #-5 /存储用于比较的第二个数8678:e51b300c ldr r3, fp, #-12 /输入的第三个数867c:e3530f83 cmp r3, #524; 0x20c /要求r3=524,第三个数匹配8680:0a000011 beq 86cc /跳去比较第二个数8684:eb00029d bl9100 第一个数是6的情况下,匹配完第三个数后并没有正常的跳去匹配第二个数,而是跳到了第一个数是7的情况下匹配第三个数,因此无论第一个数是6的情况下第三个数是几,炸弹都会爆炸。因此,最后的结果有7种:0 q 777; 1 b 214; 2 b 755; 3 k 251; 4 o 160; 5 t 458; 7 b 524.3) 验证结果4、 phase_41) 确定结果形式8788:eb0008ec blab40 878c:e1a03000 movr3, r08790:e3530001 cmp r3, #18794:1a000002 bne 87a4 8774:e59f2054 ldrr2, pc, #84; 87d0 87d0:0006485c .word0x0006485c由图可知应输入一个整数。2) 汇编结构分析8798:e51b3008 ldrr3, fp, #-8879c:e3530000 cmp r3, #0 87a0:ca000000 bgt87a8 87a4:eb000255 bl9100 由以上语句知输入的数应该大于0。87a8:e51b3008 ldrr3, fp, #-887ac:e1a00003 movr0, r3 /将输入的数作为参数传进去87b0:ebffffd2 bl8700 87b4:e1a03000 movr3, r087b8:e3530008 cmp r3, #8 /返回值应该等于887bc:0a000000 beq87c4 87c0:eb00024e bl9100 3) func4函数分析分析语句发现存在自身调用自身的情况,因此判断这是一个递归程序。8714:e3530001 cmp r3, #18718:da00000b ble874c 874c:e3a03001 movr3, #18750:e1a00003 movr0, r3当输入参数为1时方法返回1。871c:e51b3010 ldrr3, fp, #-168720:e2433001 subr3, r3, #18724:e1a00003 movr0, r38728:ebfffff4 bl8700 /调用func4(x-1)872c:e1a04000 movr4, r08730:e51b3010 ldrr3, fp, #-168734:e2433002 subr3, r3, #28738:e1a00003 movr0, r3873c:ebffffef bl8700 /调用func4(x-2)8740:e1a03000 movr3, r08744:e0843003 addr3, r4, r3 /func4(x-1)+func4(x-2)8748:ea000000 b8750 分析可得递归代码如下:int func4(int val)if(val=1) return 1;else return func4(val-1)+func4(val-2); 所以,可推导8=f(x)=f(x-1)+f(x-2)且f(1)=1,可解得x = 5。4) 验证结果5、 phase_51) 确定结果形式87e8:eb000144 bl8d00 87ec:e1a03000 movr3, r087f0:e3530006 cmp r3, #687f4:0a000000 beq 87fc 87f8:eb000240 bl9100 由以上语句知应输入长度为6的字符串。2) 汇编结构分析87fc:e3a03000 movr3, #08800:e50b3008 strr3, fp, #-88804:ea00000f b8848 883c:e51b3008 ldrr3, fp, #-88840:e2833001 addr3, r3, #18844:e50b3008 strr3, fp, #-88848:e51b3008 ldrr3, fp, #-8884c:e3530005 cmp r3, #58850:daffffec ble8808 由以上语句知r3初值为0,小于等于5则跳转,共循环6次。8818:e5d33000 ldrb r3, r3 /依次取用户输入串中的字符881c:e203300f and r3, r3, #15 /与1111做与运算,取低四位作索引8820:e59f2060 ldrr2, pc, #96; 8888 /模式串8824:e7d22003 ldrb r2, r2, r3 /取模式串中该索引对应的字符8828:e3e0300b mvnr3, #11 882c:e24b0004 subr0, fp, #48830:e0801001 addr1, r0, r18834:e0813003 addr3, r1, r38838:e5c32000 strbr2, r3 /将取出的字符存入新数组8888:0008216c .word0x0008216c以上语句就是循环读取用户输入的字符串,取低四位的值作为索引,找到模式串中该索引对应的字符,放于一个新数组中。8864:e59f1020 ldrr1, pc, #32; 888c 8868:eb000140 bl8d70 886c:e1a03000 movr3, r08870:e3530000 cmp r3, #08874:0a000000 beq887c 8878:eb000220 bl9100 888c:00064860 .word0x00064860以上语句就是将新数组与“giants”比较,相等则破译,不等则爆炸。由此可以反推,在模式串中的下标应为:15 0 5 11 13 1,根据下标可以得到答案字符串的低4位,查找ASCII表找到用户输入的六个字母便是OPEKMA。3) 验证结果6、 phase_61) 确定结果形式88b4:eb0000f0 bl8c7c 根据这句话可知应输入6个数。2) 汇编结构分析88a0:e59f3234 ldrr3, pc, #564; 8adc 首先看到这一行的加载,查看内容可以看到是node结构体,猜测包含了一个链表,那就继续往下打印这个链表可以得到下面的截图:可以看出程序内部存储了一个长度为6的链表,之后根据下面四句可以看出有一个双层的嵌套循环分别执行5次,内容和段2相似,要求6个数全部小于等于6并且各不相等。8950:e3530005 cmp r3, #58954:daffffe8 ble88fc 8968:e3530005 cmp r3, #5896c:daffffd3 ble88c0 之后又产生了一个双层的循环嵌套,并且可以看出循环一开始便将链表第一个节点的值存入了堆栈,之后内层每循环一次就将节点往后取,直至跳出内层循环,便将节点地址存入一个新的堆栈地址中。8978:e59f315c ldrr3, pc, #348; 8adc 897c:e50b3010 strr3, fp, #-16 接下来根据下面语句可以看出又是一个循环,此循环将链表按照刚刚存入堆栈

温馨提示

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

评论

0/150

提交评论