2017-2018-1 学号20155311 《信息安全系统设计基础》第5周学习总结
2017-2018-1 学号20155311 《信息安全系统设计基础》第5周学习总结
教材学习内容总结
一、机器级代码
- 对于机器级编程来说,两种抽象尤为重要。
- 指令集体系结构ISA
- 存储器系统
-
ISA:机器级程序的格式和行为,定义为指令集体系机构,它定义了处理器状态指令的格式,以及每条指令对状态的影响。机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字符数组
-
PC:程序计数器。在IA32中,用%eip表示,指示将要执行的下一条指令在存储器中的地址。
-
程序存储器:包含程序的可执行机器代码,操作系统需要的一些信息,用来管理过程调用和返回的运行时栈,以及用户分配的存储器块。
-
反汇编器查看目标代码文件的内容。
objdump -d xxx.xx
- 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。 有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看。
od code.o | more
od code.o > code.txt
- 小端法的读法是与自然方向是相反的,P109页18 a0 04 08的正确顺序其实是18 a0 04 08,去掉最高位的0后即为0x804a018
C语言数据类型在IA32中的大小
- 一些通常对C语言程序员隐藏的机器代码在IA32中是可见的:
程序计数器(在IA32中,通常称为“PC”,用%eip表示)指示将要执行的下一条指令在存储器中的地址。 - 整数寄存器:包含8个命名的位置,分别存储32位的数值,这些寄存器可以存储地址(对应C语言的指针)或整数数据,有的寄存器被用来记录某些重要的程序状态,其他的寄存器用来保存临时数据,例如过程的局部变量和函数的返回值。
- 条码寄存器:保存着最近执行的算术或逻辑指令的状态信息,他们用来实现控制或数据流中的条件变化。
浮点寄存器:一组浮点寄存器存放浮点数据
栈帧结构:机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。 - 汇编代码:
pushl %ebp 将寄存器%ebp的内容压入程序栈 movl %esp,%ebp 得到新栈低,将当前栈顶赋予栈低 popl %ebp过程调用结束,恢复旧栈低 ret 子程序的返回指令
操作系统:
-
文件:1.硬件cpu
2.内存I/O --→字节数组 -
虚拟内存:0-2^32-1 (逻辑地址(大) 物理地址(小)
-
进程
-
mount把目录中文件夹映射到arm中利于调试
静态库
ar --→利用交叉编译器的ar -
linux命令三要素:名字 参数 选项
-
execve(2)执行程序
-
which ls 查看ls安装目录
-
使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令)
1.在栈帧之间切换
frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息。
up n 向上回退n个栈帧(更外层),n默认为1.
down n 向下前进n个栈帧(更内层),n默认为1.
2.打印栈帧信息(不移动栈帧)
- frame 打印当前栈帧的简要信息。
- info frame 打印当前栈帧的详细信息。
- info frame args 打印指定栈帧的详细信息。
- info args 打印函数参数信息。
- info locals 打印当前可访问的局部变量的信息。
3.打印调用堆栈
- backtrace 打印全部栈帧的简要信息,按Ctrl-c可终止打印。
- backtrace n 打印最内层的n个栈帧的简要信息。
- backtrace -n 打印最外层的n个栈帧的简要信息。
- backtrace full 打印全部栈帧的详细信息。
- backtrace full n 打印最内层的n个栈帧的详细信息。
- backtrace full -n 打印最外层的n个栈帧的详细信息。
教材学习中的问题和解决过程
- 练习中关于改变push $0xff的指令后缀,请教同学后明白对于栈操作都是双字操作,所以不管是pop还是push都应该使用pushl和popl
代码调试中的问题和解决过程
代码托管
https://gitee.com/gaoziyun11/Linux/tree/master/第五周
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |