GDB汇编调试命令

GDB汇编调试命令

之前学xv6时用到的GDB,在这里整理了一份常用gdb命令,免得自己以后还得去网上查那些对错不论的博客。

1. info r 显示当前的寄存器值

对于标志寄存器,见下图。其实输入上面命令,eflags后面会直接显示当前为1的寄存器名称。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aik6OLGV-1594872387491)(/home/yichuan/桌面/eflags.png)]

2. 要查看寄存器的值,很简单,可以使用如下命令:

info registers
查看寄存器的情况。(除了浮点寄存器),同 info r

info all-registers
查看所有寄存器的情况。(包括浮点寄存器)

info registers regname …
查看所指定的寄存器的情况。

寄存器中放置了程序运行时的数据,比如程序当前运行的指令地址( ip),程序的当前堆栈地址( sp)等等。同样可以使用 print命令来访问寄存器的情况,只需要在寄存器名字前加一个 $符号就可以了。如: p $eip。这样是打印出eip的十进制值,也就是一个地址。

3. 最常用的两个,设置断点和单步调试

b *0x7c00		在0x7c00处设置断点
si				单步调试命令

4. 查看指定地址处的值:x命令

gdb官方的帮助文档如下。

(gdb) help x
Examine memory: x/FMT ADDRESS.
ADDRESS is an expression for the memory address to examine.
FMT is a repeat count followed by a format letter and a size letter.
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char), s(string)
and z(hex, zero padded on the left).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).
The specified number of objects of the specified size are printed
according to the format.

Defaults for format and size letters are those previously used.
Default count is 1. Default address is following last thing printed
with this command or “print”.

英语好的可以直接对照着看。

这是几个范例

x/nx 0xffff		查看0xffff处的n个16进制数
x/ns 0xffff		查看0xffff处的n个字符串
x/nc 0xffff		查看0xffff处的n个char字符

如上,可以通过修改n后的后缀,来改变显示的位的不同解释,从而显示不同结果。

下面是x指令的详细中文介绍

x/<n/format/size> <addr>

n、format、size是可选的参数。

  • n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的size定义。

  • format表示显示格式。如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i。一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:

o 按八进制格式显示变量。

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十进制格式显示无符号整型。

t 按二进制格式显示变量。

c 按字符格式显示变量。

f 按浮点数格式显示变量。

z 按十六进制显示变量,左侧填充0。
  • size 表示从当前地址往后,显示的每个内存单元的字节数,如果不指定的话,GDB默认是4个bytes。size参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

format和size可以组合使用,如下,如果使用wu,w意为一次选取四字节一个字,u意为输出为无符号十进制数。

(gdb) x/10wu 0x7fffffffdc40
0x7fffffffdc40:	1	2	3	4
0x7fffffffdc50:	5	6	4199473	0
0x7fffffffdc60:	4294958440	32767
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值