摘要:gdb使用教程(一)的研究资料


Stack frame at //当前栈的起始地址
eip //表示当前的eip寄存器的值,表示的是即将执行的指令的地址
saved eip //表示调用当前指令的指令地址
called by frame at //上一个栈的起始地址
caller of frame at //下一个栈的起始地址
Arglist at //参数列表的地址
Locals at //存放函数局部变量的地址
Previous frame's sp is //上一个栈帧的最后的ESP的值
Saved registers //寄存器的值在栈中的地址

Saved registers保存的是寄存器的
举个例子:
push ebp
mov ebp,esp
压栈的就是这个值,表示的是上个栈帧的ebp。压栈的值在栈中的地址就是ebp at

调用函数之前函数的下一条指令(eip)会被压入堆栈。压栈的值在栈中的地址就是eip at


info reg打印当前寄存器的值


x/1x 地址    以0x形式打印地址中的内容
x/1s 地址    以字符串的形式打印地址中的内容
x/1i 地址    以指令的形式打印地址中的内容

backtrace 打印堆栈
info f 数字 打印指定堆栈的详细信息

list打印源码



disassemble 地址/函数名  打印指定函数的汇编代码

disassemble /m main   上面显示代码,下面显示代码对应的汇编代码

p a 打印a变量的值
set variable a=66 设置a变量的值

编译的时候要用
gcc -g shi1.c -o shi111   一定要带-g选项,不然不能使用list列出源代码

gdb -q shi111 -q不显示gdb版本信息等比较简洁

p system打印函数的地址