本章涉及的汇编指令繁多,笔记中没有涉及,需要时直接翻阅教材
计算机执行机器代码,用字节序列编码低级的操作,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信。
linux> gcc -Og -S test.c // 产生test.s汇编文件 linux> gcc -Og -c test.c // 编译文件并产生目标代码test.o,是二进制格式 linux> objdump -d test.o // 反汇编,根据机器代码产生一种类似于汇编代码的格式 linux> gcc -Og -o prog main.c test.c // 链接两个文件并编译产生可执行文件prog linux> objdump -d prog // 反汇编 // 汇编代码中以.开头的行都是指导汇编器和链接器工作的伪指令
过程P调用过程Q,Q执行后返回到P,这个动作包括以下机制:
栈和程序寄存器存放着传递传递控制和数据、分配内存所需要的信息。当P调用Q时,控制和数据信息添加到栈尾;当P返回时,这些信息会被释放掉。
对齐数据可以提高内存系统性能,原则是 任何K字节的基本对象地址必须是K的倍数 。
汇编代码.align 8
表示后面数据的起始地址是8的倍数。
用下面命令可以启动GDB调试器:
// 启动gdb调试器,其中proc为可执行程序 // gdb调试器中,使用help获取GDB信息,info frame获取栈帧信息,info registers获取寄存器值 linux> gdb prog
a
--
123456789
更改id为3
--
test
更改id为2
--
commentor
伪造名称???
--
hhh
伪造名称???
--
yayay