gdb打印信息2——打印内存的值以及使用$_
测试代码
#include <stdio.h>
int main (int argc, char *argv[]) {
int i = 0;
char a[100];
for (i = 0; i < sizeof(a); ++i) {
a[i] = i;
}
return 0;
}
测试过程
首先打上断点,跑起来
这样,就完成了赋值操作
然后就可以查看内存的值了,这里的数组是char类型(1个字节)的,数组名是首地址
可以使用x/nfu addr
命令来打印内存的值,
意思是以f
格式,打印从addr
开始的n
个长度单元为u
的内存值
- n:输出单元的个数
- f:输出的格式,x为16进制形式,o为八进制,u为十进制,t为二进制
- u:一个单元的长度,b是一个byte,h是两个byte,w是四个byte(一个word)
以16进制格式打印数组前16个byte的值
以8进制格式打印数组前16个byte的值
以十进制格式打印数组前16个byte的值
以二进制格式打印数组前16个byte的值
以16进制格式打印数组前16个word的值
现在我们换成
int
类型的数组来看一下,由于int类型占用四个字节,那我们会得到什么样的结果呢
可以看到,每四个字节才完成一次赋值操作。
使用$_
在使用了
x
或者是info
等命令后,会把最后检查的内存地址存在$_
中,并且把地址中的内容放在$__
中