【快速学】Dev C++查看内存中的值

开始调试后,在Send command to GDB框里输入GDB指令

1、获得a在内存中的地址

print /x &a

2、查看内存中的值

可以看到a在内存中的地址为0x62fe1c

输入指令x /32db 0x62fe1c查看a在内存中的值。

x /32db 0x62fe1c 表示以地址0x62fe1c为起始地址,返回32个单元的值,输出格式为有符号十进制整数,每个单元有1个字节。

可看到内存0x62fe1c处存储的值为10

分析:

第一行地址为0x62fe1c,第二行地址为0x62fe24

0x62fe24-0x62fe1c=0x000008,算出一行数据共8个字节,

可看到每行刚好有8个数,说明每个数是一个字节

a是int类型,故a应该占4个字节的位置,从图中看出低字节在前面,说明是小端存储,真正的顺序应该是0 0 0 10(十进制)

第一行有-96这样的数,故猜测此处显示的十进制数是将1字节数据当作有符号整数转换为十进制得到的

3、验证分析:

令int a=-2,a的补码是1111 1111 1111 1111 1111 1111 1111 1110

十六进制:0xfffffffe,小端存储:fe ff ff ff

小端存储(十进制,有符号):-2 -1 -1 -1

从图中可看到,试验结果与我们的推导相符合,验证成功

4、16进制显示

一般使用16进制显示内存中的值,

可将命令改为x /32xb 0x62fe1c,表示以地址0x62fe1c为起始地址,返回32个单元的值,输出格式为按十六进制格式显示无符号整型,每个单元有1个字节。

5、详细指令

GDB命令 x

功能:查看内存地址中的值

格式:x/<n/f/u>  <addr>

解释:以addr为起始地址,返回n个单元的值,输出格式是f,每个单元大小为u个字节。

--------------------------------------------------------------

例:32bu第一位是32,第二位是b,第三位是u

指令  x /32bu 0x62fe1c  标红加粗部分的格式:

第1位(返回几个单元的值) 第2位(显示格式) 第3位(每个单元由几个字节组成)
返回1个单元的值 默认为有符号十进制整数 默认为4 Bytes
3 返回3个单元的值 x 按十六进制格式显示变量。 b 1 Byte
32 返回32个单元的值 d 按有符号十进制格式显示变量。 h 2 Bytes
n 返回n个单元的值 u 按十六进制格式显示无符号整型。 w 4 Bytes
    o 按八进制格式显示变量。 g 8 Bytes
    t 按二进制格式显示变量。    
    a 按十六进制格式显示变量。    
    c 按字符格式显示变量。    
    f 按浮点数格式显示变量。    

6、指令的缺省使用

建议不要省略,该写啥写啥。

虽然有默认输出格式,但使用其他格式(如十六进制)后,缺省的默认输出格式就会变为刚才使用的(十六进制)

默认格式:x / 0x62fe1c表示以地址0x62fe1c为起始地址,返回1个单元的值,输出格式为有符号十进制整数,每个单元有4个字节

6.1 实验发现第三位可省略,一个单元默认是4个字节

 

6.2 实验发现第一位可省略,默认输出一个单元

6.3 实验发现第二位可省略,默认输出十进制整数

 

 

 

参考:

GDB官方文档:https://www.sourceware.org/gdb/documentation/

 

posted @ 2023-01-29 23:03  尚方咸鱼  阅读(2445)  评论(0编辑  收藏  举报