-
x
/ [Length] [Format: t o d x f a c s] [Address expression b-8 h-16 w-32 g-64 ] 📎GDB Command Reference : x
-
p
/ t-2 o-8 d-10 x-16 f-loat a-ddress c-har s-tring [var]
- ⚠️ 要注意区分,x 是扫描内存,因此后面跟的直接是内存地址, 而 p 是输出变量的值,因此后面想跟地址的话,需要取其内容,即加上
*
- 关于
*
,很多命令地址前面都要加星号,因为不加星号的一个地址,是被当成函数来看待的
-
s n
:C 语言级别的单步执行; si ni
汇编级别的单步执行
-
i [line] / [locals] / [vtbl] / [args] / [checkpoints] / [breakpoints]
-
info line [line] / [function] / [*addr]
:显示源码对应的内存中的起始结束地址
-
info vtbl [objs]
:直接查看对象的虚函数表(也可以类型转换的形式打印出来,参考C++类的内存分配,基本思想就是:对象的第一块内存放的就是虚表,虚表是一个函数指针数组,因此可以先将对象地址转换为指向指针的指针,然后对其取内容,就得到了虚表指针。把这个值转换为指向指针的指针,即得虚表)
-
set print array-indexes on
:打印数组的时候显示 index
-
set disassemble next-line on
,disassemble
-
set [args] / [register] / [*address] = [val]
:设置参数、寄存器值、内存处值
-
jump [*address]
:跳转到指定地址处执行,return [val]
:直接返回。都可以改变程序走向。
-
shell [cmd]
:运行 shell 命令
-
rbreak [regex]
:在所有满足正则表达式的函数处打断点