用户名: 密码: 忘记密码? 注册

GDB的基本使用方法

作者:  时间: 2010-11-23

GDBGNU开源组织发布的一个强大的UNIX(或类UNIX)环境下的程序调试工具。要使用GDB调试程序,在编译程序生成执行文件时要加上相应选项。


1 断点相关命令,见表1

 1 断点相关命令

GDB命令

参数

意义

常用示例

break

地址

下断点,可简写为b。地址类型包括:

函数名

源文件行号

*内存地址

break main

break 12

break *(0x08048373)

watch

表达式

表达式的值被改变,程序将停止执行

watch *((int*)0x80d1ba8)

clear

地址

break相反,清除指定地址上的断点

clear main

clear 12

clear *(0x08048373)

info

break

显示断点信息,包括所有断点的编号、种类、使能状态、地址及位置

info break

disable

断点编号

禁用一个断点

disable 1

enable

断点编号

启用一个被禁用的断点

enable 1

delete

断点编号

删除一个断点,可简写为d

delete 1

 

2 执行相关命令,见表2

 2 执行相关命令

GDB命令

参数

意义

常见示例

run

命令行参数

运行程序,可简写为r

run ARGUMENT1

attach

进程号

调试已运行的进程

attach 1022

continue

次数(可选)

继续执行,可简写为c

c

c 4

next

次数(可选)

单步(不进入函数调用),可简写为n

n

n 4(相当于执行4n)

nexti

次数(可选)

单步指令(不进入函数调用),可简写为ni

同上

step

次数(可选)

单步(跟入函数调用),可简写为s

同上

stepi

次数(可选)

单步指令(跟入函数调用),可简写为s

同上

until

源文件行号

执行到指定的地址后中断,可简写为u

u 18

finish

-

运行当前函数,直到函数退出

-

return

-

立即退出当前函数

-

 

3 信息查看相关命令,见表3

 3 信息查看相关命令

GDB命令

参数

意义

常见示例

info

reg

break

files

args

frame

functions

显示各种信息,info可以简写为i

info reg

info break

backtrace

帖的数目

显示当前函数调用栈信息,可简写为bt

bt

print

/f exp

f:参数

exp:表达式

显示表示的值。格式有:

x 十六进制

c 字符

等,print可简写为p

p/c 0x41

p/x 1024

p str

p/x $eax

x

/nfu addr

N: 个数

F:

U:

如果没有指定地址则按接着上一次x命令显示之后的地址。

显示指定地址的内容。格式有:

x 十六进制

s 字符串

i 指令

单元大小有:

b h w g

b为一个字节,其他依次比前一个大一倍

x/4i $pc

x/16xb $sp

x/s*(argv+1)

x/s 0xbffffc52

list

行号,函数或地址

如果调试的是带符号编译的程序,那么list命令可以列出程序源码。list可简写为l

l file.c:19

disass

函数名

反汇编指定函数,如果没有指定参数默认为当前函数

dismass main

 

4 其他常见命令,见表4

1 断点相关命令

GDB命令

参数

意义

常用示例

回车

-

重复执行上一次命令

-

set

参数非常多

设置值

set var i=40

set {int} 0xbffffc52=50

set {int}($esp+4)=$eip

shell

外部shell命令

执行外部shel命令

shell ps -ef

show

参数多

显示参数相关信息

show language

 

注意:表1-4中的命令均可以通过输入help+GDB命令来获得帮助。

 参考资料:

1  许治坤等,网络渗透技术,电子工业出版社,20054

2  GDB完全手册

3  GDB手册