You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDB如何以单字节模式打印十六进制数组并将内容输出在同一行

GDB单字节十六进制同屏输出解决方法

你可以通过修改GDB输出配置或者自定义命令实现需求,具体操作如下:

方法1:临时修改输出宽度(单次生效)

GDB默认会按照终端宽度自动对x命令的输出换行,你可以先将输出宽度设置为0禁用自动换行,再执行单字节打印命令即可:

# 禁用自动换行,0代表输出不限制宽度
(gdb) set width 0
# 执行单字节打印命令
(gdb) x/20xb 0x00007ffff7e84000

输出效果如下:

0x7ffff7e84000 <opendir>: 0xf3 0x0f 0x1e 0xfa 0x41 0x55 0x41 0x54 0x55 0x53 0x48 0x81 0xec 0xa8 0x00 0x00 0x00 0x64 0x48 0x8b

如果需要恢复默认换行逻辑,执行set width auto即可。

方法2:永久配置(每次启动GDB自动生效)

将禁用自动换行的配置写入GDB初始化文件~/.gdbinit,后续打开GDB无需重复执行设置命令:

# 终端执行写入配置
echo "set width 0" >> ~/.gdbinit

方法3:自定义打印命令(无地址前缀,纯字节输出)

如果你不需要输出地址、函数名前缀,只需要纯十六进制字节内容,可以在GDB中定义自定义命令:

# 在GDB中输入以下内容定义自定义命令x1,两个参数分别为起始地址、打印字节数
define x1
  set $addr = $arg0
  set $len = $arg1
  set $i = 0
  while $i < $len
    printf "0x%02x ", *(unsigned char*)($addr + $i)
    set $i = $i + 1
  end
  printf "\n"
end

使用时直接调用即可:

(gdb) x1 0x00007ffff7e84000 20

输出效果:

0xf3 0x0f 0x1e 0xfa 0x41 0x57 0x41 0x56 0x41 0x55 0x41 0x54 0x41 0x89 0xfc 0x55 0x00 0xa8 0xec 0x81

也可以将自定义命令的代码写入~/.gdbinit实现永久生效。

内容的提问来源于stack exchange,提问作者daisy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:15:02