gdb使用指北
这里陈述的用法主要是为了反汇编和bomblab所服务(至少在目前是)
gdb用法指北
GDB(GNU Debugger)是一个强大的调试工具,用于分析和调试程序。以下是一些GDB的基础命令:
启动程序:
1 | gdb <executable> |
启动GDB并加载要调试的可执行文件。
设置断点:
1 | break <function_name> |
在指定的函数内设置断点,使程序在该函数内停止执行。
1 | break <line_number> |
在指定行号上设置断点。
运行程序:
1 | run |
运行程序,直到遇到断点或程序结束。
单步执行:
1 | stepi |
单步执行程序,进入函数内部。
1 | next |
单步执行程序,不进入函数内部,直到函数调用结束。
完成当前函数
1 | finish |
查看变量的值:
1 | print <variable> |
打印指定变量的值。
查看堆栈帧:
1 | backtrace |
打印当前调用堆栈的信息。
切换到指定帧:
1 | frame <frame_number> |
切换到指定的堆栈帧。
继续执行程序:
1 | continue |
从当前位置继续执行程序,直到遇到下一个断点或程序结束。
查看符号表
1 | objdump -t bomb | less |
反编译炸弹
1 | objdump -d bomb > bomb.txt |
退出GDB:
1 | quit |
退出GDB。
反汇编
反汇编函数:
1
disassemble <function_name>
显示指定函数的汇编代码。
反汇编当前代码:
1
disassemble
可以缩写为
1
disas
显示当前执行点附近的汇编代码。
设置反汇编指令数目:
1
set disassembly-flavor <flavor>
设置反汇编输出的指令数目。
<flavor>
可以是att
或intel
,表示使用AT&T或Intel语法。查看寄存器值:
1
info registers
显示当前寄存器的值。
在反汇编中设置断点:
1
break *<address>
在指定地址处设置断点,可以是汇编指令的地址。
查看内存内容:
1
x/<n>x <address>
显示从指定地址开始的
n
个十六进制字节。例如,x/4x $rsp
显示栈顶部的四个字节。查看指令执行前后的内存变化:
1
display/i $pc
每次程序停下来时,显示当前指令的反汇编,并在每步执行后继续显示。
进入/离开汇编级别:
1
layout asm
进入汇编级别的布局,显示源代码和汇编代码。可以使用
Ctrl+X
,然后按2
来切换到汇编级别。设置汇编级别布局显示选项:
1
set asm-options
设置汇编级别布局的显示选项,例如,
set asm-options intel
切换到Intel语法。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Vitus!
评论