gdb常用的指令

在gdb中,使用命令break(b)指定断点:
(gdb) break *_start
Note: breakpoint 1 also set at pc 0x8048074.
Breakpoint 2 at 0x8048074: file hello.s, line 12.
(gdb) 

使用命令run(r)启动程序:
(gdb) run
Starting program: /home/allen/as/1_hello/hello
Breakpoint 1, _start () at hello.s:12
12    movl $len, %edx
(gdb)

可以看到程序启动了,停留在我们之前设置的断点处,使用next(n)和step(s)命令让程序单步执行:
(gdb) step
13    movl $msg, %ecx
(gdb) next
14    movl $1, %ebx
(gdb) s
15    movl $4, %eax
(gdb) n
16    int $0x80
(gdb) 

在单步调试运行时可以查看检查数据元素值。最常被检查的元素是寄存器和内存位置,使用info register命令可以显示所有寄存器的值,使用print命令可以显示指定寄存器或变量的值,使用x命令显示指定内存位置的内容。
(gdb) info registers
eax            0x4 4
ecx            0x8049098 134516888
edx            0xd 13
ebx            0x1 1
esp            0xbffff3d0 0xbffff3d0
ebp            0x0 0x0
esi            0x0 0
edi            0x0 0
eip            0x8048088 0x8048088 <_start+20>
eflags         0x212 [ AF IF ]
cs             0x73 115
ss             0x7b 123
ds             0x7b 123
es             0x7b 123
fs             0x0 0
gs             0x0 0
(gdb) 
使用命令print 加上指定寄存器也可以显示寄存器的值:
(gdb) print $eax
$1 = 4
(gdb) print $ebx
$4 = 1
(gdb) print $ecx
$5 = 134516888
(gdb) print $edx
$6 = 13
(gdb) 
print命令加上修饰符可以改变pritn命令输出格式:
print/d 显示十进制的值
print/t显示二进制的值
print/x显示十六进制的值
(gdb) print/x $edx
$9 = 0xd

x命令也可以使用修饰符修改输出,其格式为:
x/nyz
n为要显示的字段数;
y是输出格式,可以是c(字符)、d(十进制)、x(十六进制);
z是要显示的字段的长度,可以是b(字节)、h(16位字)、w(32位字)。
(gdb) x/13cb &msg
0x8049098 <msg>: 104 'h' 101 'e' 108 'l' 108 'l' 111 'o' 32 ' ' 119 'w' 111 'o'
0x80490a0 <msg+8>: 114 'r' 108 'l' 100 'd' 33 '!' 10 '\n'
(gdb)
其中msg前的&表明其是一个内存位置。
命令cont使程序按正常的方式继续运行,没如果后面没有断点,则直接运行到最后。
(gdb) cont
Continuing.
Program exited normally.
(gdb)

最后可以使用quit命令退出gdb调试。
(gdb) quit

猜你喜欢

转载自blog.csdn.net/jiaweicheng77/article/details/80614384