CSAPP实验二Bomb
有点晦涩的汇编代码,看着十分抽象。大量参考了网络上的详解,仍一知半解,只有phase5
是独立完成的。
没想到会在学会gdb调试C程序之前,先学会用gdb调试汇编。列出本次实验中常用的gdb命令如下:
1 | objdump -d <exec-file> > <filename.s> |
将C语言编译生成的二进制文件反汇编为汇编代码。之后可以在编辑器中查看汇编代码,不过主要还是在命令行窗口查看实时反汇编代码,这两者的格式不完全一样。
比如phase_1
函数汇编代码如下:
1 | 0000000000400ee0 <phase_1>: |
其中的跳转命令je
目标是绝对地址,可读性很差。而在gdb页面看到的汇编代码如下:
1 | 0x400ee0 <phase_1> sub $0x8,%rsp |
1 | gdb <exec-file> |
进入gdb调试页面,之后的命令均为gdb命令。
1 | layout asm |
切换到汇编指令模式,可以实时查看汇编代码、当前运行位置和断点位置。
1 | refresh |
页面如果字符重叠,用该命令刷新。
1 | disas <func_name> |
查看指定函数的汇编代码。
1 | b <func_name> |
给指定函数或者指定位置打断点。
1 | r |
开始运行,直到第一个断点位置。
1 | ni |
单步执行、步入、继续执行。
1 | x /s <address> |
打印指定地址存放的字符串