20145336张子扬 《信息安全系统设计基础》第5周学习总结(一)
教材学习内容总结
学习目标
- 理解逆向的概念
- 掌握X86汇编基础,能够阅读(反)汇编代码
- 了解ISA(指令集体系结构)
-
理解函数调用栈帧的概念,并能用GDB进行调试
学习内容
-
ISA:定义了处理器状态,指令的格式,每条指令对状态的影响。
gcc -O1 -S text.c
-
使用gcc产生一个汇编文件code.s,可以使用vim查看
-
gcc -O1 -c text.c
-
使用gcc产生目标代码文件。从中可知及其实际执行的程序只是对一系列指令进行编码的字节序列。
-
objdump -d test.o
- 查看目标代码文件的内容,将他们转换成一种类似与汇编代码的格式。
- 64位机器上想要的到32代码:gcc -m32 -S text.c
- 二进制文件可以使用od命令查看,或者使用gdb的x命令
-
不同数据的汇编代码的数据
字节 b 1 字 w 2 双字/双精度 l 4/8 单精度 s 4 拓展精度 t 10/12
- %eax,%ebx,%ecx,%edx,常用的寄存器,用来存储整数数据和指针,占32位,%ax16位,%ah、%al各占8位。
- 栈指针%esp,帧指针%ebp
- 大多数指令有一个或者多个操作数,指出执行下一个操作中要引用的源数据值,以及放置结果的目标位置。操作数分为三种:第一种立即术,即为常数值;第二种寄存器,,表示寄存器中的内容;第三种存储器,通常根据有效地址访问某个存储位置。(p113表格)
- %esp是栈指针,通常指向栈顶,栈顶在底部,地址不断增大,指向位于顶部的栈底
- pushl指令的功能是把数据要入到栈顶,popl是弹出数据(p115详解)
教材学习中的问题和解决过程
本周解决了git推送代码的问题,并且成功将代码推送至开源中国。
一开始不知道什么原因,不能push,再我不断尝试后终于成功了