GDB下查看内存命令(x命令)

摘要:
x命令的语法如下:x/n,f,u是可选参数。U表示从当前地址请求的字节数。如果未指定,GDB默认为4字节。当我们指定字节长度时,GDB将从指定内存中指定的内存地址开始,读取和写入指定的字节,并将其作为值。一般来说,GDB根据变量的类型输出变量的值。为此,可以使用GDB的数据显示格式:x以十六进制格式显示变量。

http://blog.csdn.net/allenlinrui/article/details/5964046

可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:

x/<n/f/u> <addr>

n、f、u是可选的参数。

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

f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。

u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

<addr>表示一个内存地址。

注意:严格区分n和u的关系,n表示单元个数,u表示每个单元的大小。

n/f/u三个参数可以一起使用。例如:

命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示输出三个单位,u表示按十六进制显示。

输出格式

一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:

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

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

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

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

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

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

c 按字符格式显示变量。

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

(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) and s(string).

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".

(gdb) p f1

$4 = 8.25

(gdb) p f2

$5 = 125.5

(gdb) x/x &f1

0xbffff380: 0x41040000

(gdb) x/xw &f1

0xbffff380: 0x41040000

(gdb) x/xw &f2

0xbffff384: 0x42fb0000

(gdb) x/2xw &f1

0xbffff380: 0x41040000 0x42fb0000

(gdb) x/4xw &f1

0xbffff380: 0x41040000 0x42fb0000 0xbffff408 0x00bcba66

(gdb) x/tw &f1

0xbffff380: 01000001000001000000000000000000

(gdb) x/2tw &f1

0xbffff380: 01000001000001000000000000000000 01000010111110110000000000000000

(gdb) p record

$10 = {12, 76, 48, 62, 94, 17, 32, 37, 52, 69}

(gdb) p &record

$11 = (int (*)[10]) 0x8049740

(gdb) x/4uw 0x8049740

0x8049740 <record>: 12 76 48 62

(gdb) x/6ow 0x8049740

0x8049740 <record>: 014 0114 060 076

0x8049750 <record+16>: 0136 021

免责声明:文章转载自《GDB下查看内存命令(x命令)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇2018年十大区块链投资机构盘点-千氪Linux命令文件查看过滤下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vscode利用dev配置c语言,VSCode搭建C++/C调试编译环境(使用DevC++)

关于VSCode使用Dev C++的MinGW64来调试C++/C网上的教程试了很多,大部分都已经过时了或者说是不适配了,最后就选择使用Dev原有的东西来实现,不建议自己下载MinGW64,里面安装的时候有些选项不知道选什么的话很容易出现问题。 配置Dev下MinGW64的路径 假设Dev已经安装好了,然后现在要做的就是将Dev目录下的MinGW添加到环境...

winhex教程 转 武胜

winhex教程 WinHex 数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容 易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢复里面的数据,这些都叫数据恢复,只不过这些故障有容易的和困难的之分;所谓软恢复,就 是硬盘本身没有物理损伤,而是由于人为或者...

qt字符数组转ASCII(十六进制)

接收网络传输数据 QByteArray  array;//显示字符串 QString str = QString::fromLocal8Bit(array); m_receiveTxt.append(QString("%1:%2:%3").arg(m_TcpSocket->getIp()).arg(m_TcpSocke...

2.5 整数和算法

2.5.1 引言   正如2.1节所说, 算法这一术语最初指的是用整数的十进制法表示的用法进行算术运算的过程。修改后能处理二进制表示的这些算法是计算机算术的基础。这些算法为理解算法这一概念及算法复杂度提供了很好的实例。因此本书将讨论这些算法。   除算术中常用的整数算法以外,还有许多涉及整数的算法,包括欧里几德算法,这是最有用的算法之一,很可能是数学中最古...

ffmpeg 使用 gdb 调试相关技巧

本文说明了,在ffmpeg二次开发或调用库的过程,如何借助于ffmpeg源码进行调试。 注:ffmpeg版本是4.0。 1. 编写代码 编写将pcm数据转换为mp2的代码 pcm_to_mp2.c #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #i...

[C]x字符转义序列

概述       x转义的定义是这样的 转义符 字符值 输出结果 xh[h...] 具有此十六进制码的字符 输出此字符 问题      看似x后面可以接受1或n个十六进制的字符,但是如果你把一个超过ff分十六进制数赋值给一个char变量,会得到一个"Out of range"的提示; #include <stdio.h> #incl...