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/