GDB学习笔记
最近在恶补CMU 15-213 CSAPP,课程的质量是非常高的,但是其中有不少内容在西电的《计算机组成原理》、《微机原理与接口技术》等课程学过了,于是就只能“略读”一下。但是这门课的LAB质量也是很高的,于是便尝试了一下。体验了一下LAB1:bomb和LAB2:attack后,发现难度真的很大,基本上都是看着网上的答案来做的。
因为汇编语言在本科就学过了(而且实验基本上也是看网上做的),所以这篇博客主要记录一下在做实验的过程中学到最有用的东西:GDB(到现在才学GDB感觉好像有点晚了)。
启动
1 | |
运行
1 | |
添加断点
1 | |
执行
1 | |
查看代码
1 | |
查看数据
print命令
1 | |
打印数据,其中format可以是:
\d按十进制格式显示\x按十六进制格式显示\a按十六进制格式显示\u按十六进制格式显示无符号整型\o按八进制格式显示\t按二进制格式显示\c按字符格式显示\f按浮点数格式显示
<expression>可以是寄存器、变量、表达式、地址,还可以使用指针的强制类型转换来改变数据的长度,可以说在C中支持的表达式(包括解引用*和取地址符&)在这里都可以支持。
x命令
1 | |
功能比较强大的x命令,n表示要输出的个数,使用数字来表达;w表示一个数据的长度,b、h、w、g分别表示单字节、双字节、四字节、八字节,d就是输出格式,参考上文的format。
display命令
1 | |
每当到达断点时,显示表达式的值,可以使用info display和来查看表达式的信息,使用undisplay num、delete display num、disable display num来关闭第num个表达式的打印,如字面意思,前两个是删除,最后一个是暂时禁用,可以用enable display num来重新启用。
watch命令
1 | |
这个命令和上述几个命令也很像,但是行为不同。watch命令会在指定的表达式发生改变时中断程序的运行。
rwatch命令
当表达式被读取的时候中断程序。
awatch命令
每次读写表达式的值都会中断程序。
修改数据
1 | |
将某个变量key的值设置为value,当然也可以用print命令来修改,也支持寄存器的值,只要把key改成如$edx即可。
1 | |
执行信息
1 | |
GDB学习笔记
http://zhouhf.top/2024/10/13/工具/gdb-note/