如何使用gdb以十六进制格式打印文件内容?

时间:2018-10-06 07:45:34

标签: c gdb

我正在尝试构建一个将bmp图像的大小调整为f的程序,但是在识别该程序出了什么问题时遇到了问题。我想到了使用gdb来检查正在从源图像读取并写入新图像的内容,但是当我尝试打印最终图像的内容时,它似乎与我期望的有所不同。

因此,程序最初通过称为inptr的文件指针从第一张图像读取。来自第一个图像的前14个字节和40个字节存储在名为bfbi的bitmapfileheader和bitmapinfoheader类型的变量中,它们分别是14和40个字节。更改这些结构的属性以说明最终图像大小的变化。然后通过称为outptr

的指针将结构写入新文件。

将结构写入新文件后,我使用命令打印bf(在gdb中)的内容

print bf

并打印出

{bfType = 19778, bfSize = 670, bfReserved1 = 0, bfReserved2 = 0, bfOffBits = 54}

使用命令p/x bf将其格式化为十六进制时,这里的信息相同

{bfType = 0x4d42, bfSize = 0x29e, bfReserved1 = 0x0, bfReserved2 = 0x0, bfOffBits = 0x36}

当我尝试打印新图像的内容时出现问题。我使用此命令来打印前14个字节

`x /14xh outptr`

可打印

0x603250:       0x2c84  0xfbad  0x0000  0x0000  0x4000  0xf7ff  0x7fff  0x0000
0x603260:       0x4000  0xf7ff  0x7fff  0x0000  0x4000  0xf7ff

所有字节似乎与bf中存储的字节不同。我希望在gdb中使用x命令来打印出类似于xxd在终端中执行的操作,但是我不确定为什么outptr的内容与bf结构不同。

这里是source code的链接,这里是bmp.h头文件。

0 个答案:

没有答案