CSAPP——实验二 拆炸弹

Phase1

disas phase_1, 反汇编 phase_1 函数

在 phase_1函数入口处 设置断点 break phase_1

run 开始运行,输入字符串 “hello”

stepi ,逐条执行命令。寄存器 %rdi、%rsi、%rdx,%rcx、%r8、%r9用作传递函数参数,分别对应第1个参数、第2个参数直到第6个参数。

我们的输入作为调用函数时用到的参数保存在了寄存器%rdi中。对应的地址为 0x603780,用 x/s 0x603780 查看对应的值,确实如此。

stepi 继续执行下一条指令,即运行到 mov   $0x402400,%esi,此时用 x/s $esi 查看寄存器里面的值,即地址 0x402400的值,即为第一颗炸弹的答案。

Phase_2

观察 read_six_numbers 发现要输入6个数字,6个数字会依次存在 %rsp,%rsp+4,%rsp+8,%rsp+12...%rsp+24cmpl $0x1,(%rsp), 第一个数字是1,再接下去看跳转到52%rsp+4对应第2个数字,放进%rbx中将%rbp设置成%rsp+24(%rbp是用来判断循环是否退出的寄存器),之后跳转到27,这里将第1个数赋值给%eax将%eax*2去和第2个数对比,如果相等就继续,以此类推,可以发现这个循环就是用来判断输入的数字是否依次增大一倍的,所以第二题的拆弹密码就是:1 2 4 8 16 32

Phase_3

phase_3函数的反汇编代码

断点逐步执行指令,并打印出 0x4025cf 的内容

说明 sscanf 输入的两个整数存在 0x4025cf 中。反汇编后存在很多条jmp指令,可见是switch结构的语句判断。要跳转过去的地址是 0x402470+%rax+8,而eax就是我们输入的第一个数。

之后的每一个jmp都看做是一个case语句。每条 case 语句里,都是将 某个立即数 赋值给 寄存器 %eax, 最后都跳转到<phase_3+123> 的位置判断第二个数字是否匹配。

而 %eax 的值,是根据输入的第一个数 跳转到相应的case语句中赋值的,所以 %eax 有很多的取值可能。但注意:cmpl $0x7,0x8(%rsp),第一个输入的数字一定要小于7,否则会直接引爆炸弹。

我们选择输入的第一个参数为 3,则对应的跳转到十六进制 0x100 ,即 256。

Phase_4

phase_4函数

查看  func4 函数的反汇编代码,func4内部在调用func4,递归的汇编

给每条指令加上了注释:

对应的c语言程序

int func4(int target, int step, int limit) {/* edi = target; esi = step; edx = limit */int temp = (limit - step) * 0.5;int mid = temp + step;if (mid > target) {limit = mid - 1;int ret1 = func4(target, step, limit);return 2 * ret1;} else {if (mid >= target) {return 0;} else {step = mid + 1;int ret2 = func4(target, step, limit);return (2 * ret2 + 1);}}
}

最后推出其一个答案为(7,0)

Phase_5

要求输入的字符串长度=6

CSAPP_实验二 拆炸弹 汇编知识应用相关推荐

  1. CSAPP 拆炸弹 中科大实验

    实验二 拆炸弹 准备工作 首先反汇编 objdump -s -d bomb > bomb.txt phase_1 开启gdb调试,并打断点到phase_1 >> gbd bomb ( ...

  2. 汇编 二进制拆炸弹 r -t 3 -x 124

    文章目录 注 实验环境: 实验内容 实验步骤 调试过程及实验 总结 附录 注 QUT大二汇编最后一个作业:拆炸弹 通过两天中间隙来做这个实验,不能交个实验报告就完事了,毕竟是第一次接触逆向工程,老师为 ...

  3. 计算机系统实验拆炸弹,CSAPP 炸弹实验解析上

    CSAPP(Computer Systems A Programmer's Perspective),中译名为深入理解计算机系统,是一本优秀的计算机教材.该书配套了若干个课后实验,可供读者检验所学知识 ...

  4. PID温控实验平台搭建(二)——PID进阶知识介绍及源码分享

    PID温控实验平台搭建 (一)PID基础知识介绍 (二)PID进阶知识介绍及源码分享 (三)从零开始搭建STM32温控实验平台 (四)PID温控系统代码讲解 (五)最终实验现象与总结 文章目录 前言 ...

  5. CSAPP实验二——bomb lab实验

    CSAPP实验二-- bomb lab实验 实验前准备 第一部分(phase_1) 第二部分(phase_2) 第三部分(phase_3) 第四部分(phase_4) 第五部分(phase_5) 第六 ...

  6. 《深入理解计算机系统》实验二Bomb Lab下载和官方文档机翻

    前言 <深入理解计算机系统>官网:http://csapp.cs.cmu.edu/3e/labs.html 该篇文章是实验二Bomb Lab的Writeup机翻. 原文:http://cs ...

  7. MIPS反汇编拆炸弹

    计算机系统原理的实验,参考了我的前舍友和不知道哪位同学的博客,不过写得也太简略了并且还有一些错误,更像是单纯的记录,对手头没代码的人大概没啥意义吧.所以就把我自己做时的带注释的代码贴住来吧,也不过是记 ...

  8. MIPS - 反汇编 - 拆炸弹 - bomb

    MIPS - 反汇编 - 拆炸弹 - bomb 前言 整理文档发现了之前的实验报告,鉴于从17级开始才开始使用MIPS实验环境,取实验报告精华,整理主要思路如下.该博客叙述风格参考了窦优秀学长的博客. ...

  9. 哈工大计算机系统实验二——DataLab数据表示

    计算机系统实验二特别难,和上一届的实验不一样,没有学长的火炬,当时做的时候特别崩溃.幸好有一帮志同道合的伙伴们,一起慢慢把实验解决了. 把火炬传下去! 实验报告 实 验(二) 题     目 Data ...

最新文章

  1. 014、Linux下vim搜索与替换
  2. SOCKS代理工具EarthWorm、sSoks
  3. Servlet调用流程
  4. 历史是“混合体”,也是“内幕”:说说《三国大传》
  5. Qt工作笔记-Qt奇淫技巧把ToolBar改成标题栏
  6. 颜色模型和颜色应用---颜色选择及其应用
  7. 应用 memcached 提升站点性能
  8. java生成平滑散点图_【转载】如何在excel制作散点图平滑线散点图
  9. 深圳美景品牌策划机构:美景推动国际品牌MASHIMARO闪电招商,3天签约211家
  10. Socket 编程之_TCP ☎☎☎
  11. 20190825 On Java8 第十二章 集合
  12. 锋利的jquery(认识jquery)
  13. 线性代数及其应用(第三版)1.3节习题解答
  14. 虚拟化平台就在你身边-ARM架构虚拟化扩展, 以及SMMU对虚拟化等解决方案的重要性(白皮书 2010)
  15. 计算机维修培训教材,计算机芯片级维修--芯片级维修培训教材.doc
  16. layui table 渲染动态列及列数据
  17. 计算机桌面设置定时,电脑桌面定时提醒休息如何设置?
  18. 自学云计算进度(2)-Linux基础命令
  19. [转载] 晓说——第32期:抗战史上最悲壮一幕 淞沪战役(上)
  20. Centos7命令行连接wifi网络,手机usb共享网络

热门文章

  1. sklearn 命令行安装_1.sklearn库的安装
  2. DataList控件的使用
  3. Mac如何固定桌面排序
  4. 聚商汇WMS:开源仓库管理系统
  5. excel怎么不显示图表上显示为0%的项?
  6. signed integer overflow: -2147483648 - 1 cannot be represented in type ‘int‘
  7. EXCEL-如何把多个格式相同的表格批量做成图表
  8. 网络编程 —— 基础理论知识
  9. 回顾之前给公司的建议,及离开前想说的话
  10. (附源码)ssm南工二手书交易平台 毕业设计172334