Dev-C++中利用gdb查看内存地址中的值

Dev-C++中调用gdb

进行程序调试时我们可以看到调试框内有“ 发送命令到GDB ”这一项, 在此中输入命令,然后按回车即可调用GDB命令 。

Dev-C++中利用gdb查看内存地址中的值

  • 命令格式为
x/nfu <addr>

其中n,f,u为可选参数,为对应的内存地址

下面介绍这三个参数的作用

参数n-需要显示的内存单元个数

也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义

参数f-显示格式

有时候我们希望数据内容以不同格式呈现,如2进制,16进制,修改f参数可以调整

x(hex)———————-按十六进制格式显示变量。
d(decimal)—————–按十进制格式显示变量。
u(unsigned decimal)—–按十进制格式显示无符号整型。
o(octal) ——————–按八进制格式显示变量。
t(binary)——————-按二进制格式显示变量。
a(address)—————–按十六进制格式显示变量。
c(char)———————按字符格式显示变量。
f(float) ——————–按浮点数格式显示变量

参数u-每个单元的大小,按字节数来计算

默认是4 bytes,GDB会从指定内存地址开始读取指定字节,并把其当作一个值取出来,并使用格式f来显示

b: 1byte

h: 2 bytes

w: 4 bytes

g:8 bytes

表达式可以是当前程序的const常量,变量,函数等内容,但是GDB不能使用程序中所定义的宏

举例使用

下面为示例代码,并在第5行处添加断点

#include<stdio.h>
int main()
{
    float d;
    d=8.25; 
    return 0;
}

在发送命令到GDB中输入如下代码

x/4xb &d

4代表输出4个内存单元

x代表以十六进制形式输出

b代表每个单元大小1个字节

输出内容如下

->->post-prompt
0x70fe1c:	0x00	0x00	0x04	0x41

则取得了变量d所在内存单元的十六进制数据

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据