20145208 《信息安全系统设计基础》第5周学习总结
20145208 《信息安全系统设计基础》第5周学习总结
教材学习内容总结
-
本章学习内容是汇编语言,现在直接写汇编的机会不多了,但一定要能读懂,信息安全的核心思维方式“逆向”在这有很好很直接的体现,反汇编就是直接的逆向工程。
-
本章重点是3.7,但没有3.1-3.6的基础也是不行,如果想真正的提高动手能力,3.11如何用GDB调试汇编要好好练习一下,不过大多GDB技巧大家都会了。
-
3.1-3.7中练习,重点:3.1,3.3,3.5,3.6,3.9,3.14,3.15,3.16,3.22,3.23,3.27,3.29,3.30,3.33,3.34
-
实验练习的结果
-
我的实验练习的c语言代码如下:
- 去掉以
.
开头的语句后的汇编代码:
- 注释了栈帧情况的汇编代码:
- 通过gdb调试可执行文件查看eip, ebp, esp 等寄存器内容如何变化。
- 一开始调试的时候总是出问题,查阅资料后了解,在linux中gdb调试汇编文件需要先用
gcc -g3 -o * *.c
的命令来将c语言文件编译成可调试汇编的可执行文件。 - 在64位中rip就是eip,rbp就是ebp,rsp就是esp。
- 通过调试过程中的
stepi
和print /x $***
可以查询到相应寄存器的内容:
- 由上图可以看到三个寄存器的初始值
- 由上图可以看到三个寄存器在执行完第一条指令之后的内容的变换
- 内容再次改变,如果想观察三个寄存器的每一步的变化可以重复上述步骤。
- 通过上图不难发现rip寄存器(也就是eip),他身为程序计数器的内容就是下一条指令的地址。
教材学习中的问题和解决过程
- 将C语言文件编译成汇编文件并查看汇编文件内的内容
- 将C语言文件编译成可执行文件并查看可执行文件的二进制内容
- 将可执行文件反编译成汇编代码:
课后作业中的问题和解决过程
问题一
- 教材第113页习题3.1中对操作数
260(%ecx,%edx)
的求值遇到了问题 - 按照公式算出来是(264),在这里卡住了,再看了下一个空的时候才反应过来换算成16进制计算是(0x108),得出答案0x13。
问题二
- 教材121页的习题3.9,和前面的习题3.5类似,都是汇编代码转成c语言代码,但是有所不同,稍稍复杂一点,涉及到了算数和逻辑操作,一开始做起来不适应。
- 前后对照并且动手做了两遍之后就会觉得顺手多了,上一条语句的值直接用在下面的语句中,一开始可能看不习惯,但是动手很重要,做了两次就可以将看到的汇编代码代入到C语言的相应位置了,相比较C语言翻译成汇编语言来说,汇编语言反翻译成C语言相对容易一点,可能是因为更习惯C语言的原因。
问题三
- 教材148页的习题3.29,因为前面对于switch语句在汇编中的示例没有仔细阅读,在做题的时候找不到对应的跳转表序号
- 仔细阅读之后了解C语言中case对应的序号对应着跳转表中的序号,需要注意的时候跳转表中的序号从0开始的。
代码托管
代码托管链接
代码及托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/2 | 20/20 | 学会了虚拟机安装和Ubuntu的基本操作 |
第二周 | 56/56 | 1/3 | 20/40 | 学会了Ubuntu终端下的C语言编写 |
第三周 | 110/166 | 1/4 | 30/70 | 熟悉了gdb的基本操作,了解了计算机信息表示和处理 |
第四周 | 110/166 | 1/4 | 10/80 | 复习了前几周的知识 |
第五周 | 42/208 | 1/4 | 10/80 | 复习了前几周的知识 |
参考资料
posted on 2016-10-15 22:13 20145208蔡野 阅读(339) 评论(3) 编辑 收藏 举报