格式化gdb检查内存 [英] Formatting on gdb examine memory
本文介绍了格式化gdb检查内存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
(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个十六进制数字。
不知道该怎么做。没有看到参考手册的任何帮助。
任何想法?感谢。
UPDATE1
刚刚意识到再次这样做时,每个字节以十六进制表示。但是,它每行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
解决方案
您可以使用宏执行此操作。 (这是根据我对类似问题的回答进行调整的)。
< pre $
define xb16
dont-repeat
set $ addr =(char *)($ arg0)
set $ endaddr = $ addr + $ arg1
而$ addr< $ endaddr
printf%p:,$ addr
set $ lineendaddr = $ addr + 16
if $ lineendaddr> $ endaddr
set $ lineendaddr = $ endaddr
end
set $ a = $ addr
while $ a< $ lineendaddr
printf0x%02x,*(unsigned char *)$ a
set $ a ++
end
printf\\\
set $ addr = $ addr + 16
结束
结束
文件xb16
用法:xb16地址计数
输出十六进制字节数,每行16个
结束
When debugging a C/C++ code, I examine memory using the following command
(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
I would like have 16 bytes in a row and each byte shows in 2 hex digits. Not sure what to do. Don't see any help from reference manual. Any ideas? Thanks.
UPDATE1
Just realized that when doing it again, it shows every bytes in hexdigits. However, it's 8 bytes per row, not 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
解决方案
You can do this with a macro. (This is adapted from my answer to 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
这篇关于格式化gdb检查内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文