C++ gdb上的格式化检查内存
调试C/C++代码时,我使用以下命令检查内存C++ gdb上的格式化检查内存,c++,gdb,C++,Gdb,调试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个十
(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个十六进制数字。
不知道该怎么办。我看不到你的帮助。
有什么想法吗?谢谢
更新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
您可以使用宏执行此操作。(这是根据我对的回答改编的)
定义xb16
不要重复
设置$addr=(字符*)($arg0)
设置$endaddr=$addr+$arg1
而$addr<$endaddr
printf“%p:”,$addr
设置$lineendaddr=$addr+16
如果$lineendaddr>$endaddr
设置$lineendaddr=$endaddr
终止
设置$a=$addr
而$a<$lineendaddr
printf“0x%02x”,*(未签名字符*)$a
一美元一套++
终止
printf“\n”
设置$addr=$addr+16
终止
终止
文件xb16
用法:xb16地址计数
以十六进制输出字节,每行16个
终止
您可以使用宏执行此操作。(这是根据我对的回答改编的)
定义xb16
不要重复
设置$addr=(字符*)($arg0)
设置$endaddr=$addr+$arg1
而$addr<$endaddr
printf“%p:”,$addr
设置$lineendaddr=$addr+16
如果$lineendaddr>$endaddr
设置$lineendaddr=$endaddr
终止
设置$a=$addr
而$a<$lineendaddr
printf“0x%02x”,*(未签名字符*)$a
一美元一套++
终止
printf“\n”
设置$addr=$addr+16
终止
终止
文件xb16
用法:xb16地址计数
以十六进制输出字节,每行16个
终止
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