gpt4 book ai didi

c++ - 在 gdb 上格式化检查内存

转载 作者:行者123 更新时间:2023-11-28 00:14:05 25 4
gpt4 key购买 nike

调试 C/C++ 代码时,我使用以下命令检查内存

(gdb)x/32xub data
0x7fef824b2c6a: 8 0 39 235 101 169 0 30
0x7fef824b2c72: 73 219 25 195 8 0 69 0
0x7fef824b2c7a: 0 60 17 223 64 0 54 6
0x7fef824b2c82: 245 43 85 190 0 3 147 32

我想要连续 16 个字节,每个字节以 2 个十六进制数字显示。不知道该怎么办。看不到来自 reference manual 的任何帮助.有任何想法吗?谢谢。

更新1

刚刚意识到,再次执行时,它以十六进制数字显示每个字节。但是,它是每行 8 个字节,而不是 16 个。

(gdb) x/32x prevPkt
0x7fef824b2c6a: 0x08 0x00 0x27 0xeb 0x65 0xa9 0x00 0x1e
0x7fef824b2c72: 0x49 0xdb 0x19 0xc3 0x08 0x00 0x45 0x00
0x7fef824b2c7a: 0x00 0x3c 0x11 0xdf 0x40 0x00 0x36 0x06
0x7fef824b2c82: 0xf5 0x2b 0x55 0xbe 0x00 0x03 0x93 0x20

最佳答案

您可以使用宏来完成此操作。 (这是改编 self 对 a similar question 的回答)。

define xb16
dont-repeat
set $addr = (char *)($arg0)
set $endaddr = $addr + $arg1
while $addr < $endaddr
printf "%p: ", $addr
set $lineendaddr = $addr + 16
if $lineendaddr > $endaddr
set $lineendaddr = $endaddr
end
set $a = $addr
while $a < $lineendaddr
printf "0x%02x ", *(unsigned char *)$a
set $a++
end
printf "\n"
set $addr = $addr + 16
end
end

document xb16
usage: xb16 address count
outputs bytes in hex, 16 per row
end

关于c++ - 在 gdb 上格式化检查内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442407/

25 4 0
文章推荐: C++ 中的 Python 风格字符串替换
文章推荐: C++从文件加载 "irregular"数据的最简单方法
文章推荐: javascript - Highcharts:为什么重绘会改变所选点的半径?
文章推荐: html - HTML 中的半透明