GDB debug
- - <PID> debug对就进程号的运行中的程序
- -q (quiet) 不打印一些详细的相关信息 或 --silent
- list(l) 查看程序
- break(b) 函数名 / 行号 / 文件名:行号 / 行号 if 条件
- info registers 寄存器的当前值
- p $esp 显示单个寄存器值
- f 0 查看栈帧
- layout 在新的窗口显示同步的调试代码
- s(tep) step in 单步
- n(ext) step over 单行调试
- r(un) 运行到断点处
- c 继续运行到下一个断点
- start 开始执行程序,停在main函数第一行语句前面等待命令
- disas(disassemble) addr 查看addr处前后的反汇编代码(disas main 查看main函数的反汇编)
- si 单步调试汇编代码
- ni 单行调试汇编代码
- set $pc = 0x8048394 可以跳转
layoutsrc
显示源代码窗口
layoutasm
显示汇编窗口
layout regs 显示源代码/汇编和寄存器窗口
layout split 显示源代码和汇编窗口
layout next 显示下一个layout
layout prev 显示上一个layout
ctrl + L 刷新窗口
ctrl + x 再按 1 单窗口模式,显示一个窗口
ctrl + x 再按 2 双窗口模式,显示两个窗口
ctrl + x,再按A
关闭显示框
gdb查看指定地址的内存地址的值:examine 简写 x
x
/<n/f/u> <addr>
n:是正整数,表示需要显示的内存单元的个数,即从当前地址向后显示n个内存单元的内容,
一个内存单元的大小由第三个参数u定义。
f:表示addr指向的内存内容的输出格式,s对应输出字符串,此处需特别注意输出整型数据的格式:
x(hex) 按十六进制格式显示变量。
d(decimal) 按十进制格式显示变量。
u(unsigned decimal) 按十进制格式显示无符号整型。
o(octal) 按八进制格式显示变量。
t(binary) 按二进制格式显示变量。
a(address) 按十六进制格式显示变量。
c(char) 按字符格式显示变量。
f(float) 按浮点数格式显示变量
u:就是指以多少个字节作为一个内存单元-unit,默认为4。u还可以用被一些字符表示:
如b=1 byte, h=2 bytes,w=4 bytes,g=8 bytes.
x/1db $ebp-0x8
从x/1db $ebp-0x8地址中取1个1byte,并以十进制显示变量