文件数据文本化: xxd / hexdump / readelf

xxd file > output.txt
hexdump -C file > output.txt
readelf -h file > output.txt

xxd

xxd 用于创建给定文件或标准输入的十六进制转储,也可以将十六进制转储转换回其原始二进制形式。与 uuencode(1)uudecode(1) 类似,它允许以 “邮件安全” 的ASCII表示形式传输二进制数据,但优势在于可以解码到标准输出。此外,它还可用于执行二进制文件修补。

参数 说明
-a, -autoskip 切换自动跳过功能:用单个 * 替换全零行。默认关闭。
-b, -bits 切换到二进制位转储,而不是十六进制转储。此选项将字节写为八个 “1” 和 “0” 组成的数字,而不是普通的十六进制转储。每行前面是十六进制的行号,后面是ASCII(或EBCDIC)表示。命令行开关 -p-i 在此模式下不起作用。
-c cols, -cols cols 每行格式化 <cols> 个字节。默认值为16(-i 时为12,-ps 时为30,-b 时为6)。最大值为256。-ps 模式下无最大值。在 -ps 模式下,值为0会导致输出为一整行长字符串。
-C, -capitalize 在使用 -i 时,以C语言头文件风格将变量名大写。
-E, -EBCDIC 将右侧列中的字符编码从ASCII更改为EBCDIC。这不会改变十六进制表示。此选项与 -r-p-i 组合使用时无意义。
-e 切换到小端序十六进制转储。此选项将字节组视为小端序字节顺序的字。默认的4字节分组可使用 -g 更改。此选项仅适用于十六进制转储,不改变ASCII(或EBCDIC)表示。命令行开关 -r-p-i 在此模式下不起作用。
-g bytes, -groupsize bytes <bytes> 个字节(每个字节用两个十六进制字符或八个二进制位表示)的输出之间用空格分隔。指定 -g 0 可取消分组。正常模式下 <bytes> 默认值为2,小端序模式下为4,二进制位模式下为1。分组不适用于PostScript或头文件风格输出。
-h, -help 打印可用命令的摘要并退出。不执行十六进制转储。
-i, -include 以C语言头文件风格输出。除非 xxd 从标准输入读取,否则会写入一个完整的静态数组定义(数组名以输入文件名命名)。
-l len, -len len 写入 <len> 个字节后停止。
-n name, -name name 在使用 -i 时覆盖输出的变量名。数组名为 name,长度名为 name_len
-o offset 在显示的文件位置上加上 <offset>
-p, -ps, -postscript, -plain 以PostScript连续十六进制转储风格输出,也称为纯十六进制转储风格。
-r, -revert 反向操作:将十六进制转储转换(或修补)为二进制。如果不写入标准输出,xxd 会在不截断输出文件的情况下写入。使用 -r -p 组合可读取无行号信息且无特定列布局的纯十六进制转储。输入中任何位置允许有额外的空格和换行符。使用 -r -b 组合可读取二进制位转储而非十六进制转储。
-R when 在输出中,根据十六进制值对十六进制值和字符值都进行相同的颜色标记,主要用于区分可打印和不可打印字符。when 取值为 neveralwaysauto。当设置了 $NO_COLOR 环境变量时,颜色标记功能将被禁用。
-seek offset -r 之后使用:在十六进制转储中找到的文件位置上加上 <offset> 后进行转换。
-s [+][-]seek 从输入文件的 <seek> 字节绝对(或相对)偏移位置开始。+ 表示偏移相对于当前标准输入文件位置(不从标准输入读取时此符号无意义)。- 表示偏移从输入末尾开始计算(或与 + 组合使用时,表示从当前标准输入文件位置之前开始计算)。如果不使用 -s 选项,xxd 从当前文件位置开始。
-u 使用大写十六进制字母。默认使用小写字母。
-v, -version 显示版本字符串。

hexdump

hexdump 工具是一个过滤器,它能以用户指定的格式显示指定文件的内容;若未指定文件,则显示标准输入的内容。

参数 说明
-b, --one-byte-octal 单字节八进制显示。每行以十六进制显示输入偏移量,后跟十六个用空格分隔、三位一列且用零填充的输入数据字节(以八进制表示)。
-c, --one-byte-char 单字节字符显示。每行以十六进制显示输入偏移量,后跟十六个用空格分隔、三位一列且用空格填充的输入数据字符。
-C, --canonical 标准十六进制+ASCII显示。每行以十六进制显示输入偏移量,后跟十六个用空格分隔、两位一列的十六进制字节,接着是同样的十六个字节,以 %_p 格式显示并包含在 `
-d, --two-bytes-decimal 双字节十进制显示。每行以十六进制显示输入偏移量,后跟八个用空格分隔、五位一列、用零填充的双字节输入数据单元(以无符号十进制表示)。
-e, --format format_string 指定用于显示数据的格式字符串。
-f, --format-file file 指定一个文件,该文件包含一个或多个用换行符分隔的格式字符串。空行和第一个非空白字符是井号(#)的行将被忽略。
-L, --color[=when] 接受输出的颜色设置。可选参数 when 可以是 auto(自动)、never(从不)或 always(总是)。如果省略 when 参数,则默认为 auto。颜色显示可以被禁用;当前内置的默认设置可查看 --help 的输出。另请参阅下面的 “颜色” 小节和 “颜色” 部分。
-n, --length length 仅处理长度为 length 字节的输入。
-o, --two-bytes-octal 双字节八进制显示。每行以十六进制显示输入偏移量,后跟八个用空格分隔、六位一列、用零填充的双字节输入数据量(以八进制表示)。
-s, --skip offset 从输入开头跳过 offset 字节。
-v, --no-squeezing -v 选项使 hexdump 显示所有输入数据。如果不使用 -v 选项,任何一组与前一组输出行(除了输入偏移量)完全相同的输出行,都将被替换为仅包含一个星号的行。
-x, --two-bytes-hex 双字节十六进制显示。每行以十六进制显示输入偏移量,后跟八个用空格分隔、四位一列、用零填充的双字节输入数据量(以十六进制表示)。
-h, --help 显示帮助文本并退出。
-V, --version 输出版本信息并退出。

readelf

readelf用于展示一个或多个ELF(Executable and Linkable Format)格式目标文件的相关信息。借助各种选项,用户能够灵活控制具体要展示的信息内容。它不仅支持32位和64位的ELF文件,还能处理包含ELF文件的归档文件。该程序和objdump功能类似,但readelf提供的信息更为详尽,并且它独立于BFD(Binary File Descriptor)库运行。这意味着如果BFD库出现问题,readelf的正常工作不会受到影响。

参数 说明
-a, --all 等同于同时指定--file-header--program-headers--sections--symbols--relocs--dynamic--notes--version-info--arch-specific--unwind--section-groups--histogram这些参数。不过要注意,此选项不会自动启用--use-dynamic。所以,若命令行中未明确给出--use-dynamic参数,那么动态符号和动态重定位信息将不会展示出来
-h, --file-header 用于展示文件起始位置ELF头中所包含的信息
-l, --program-headers, --segments 若文件存在段头,该参数可展示其相关信息
-S, --sections, --section-headers 用于展示文件节头的信息(前提是文件存在节头)
-s, --symbols, --syms 若文件有符号表节,此参数会展示其中的条目。若符号关联了版本信息,也会一并展示。版本字符串会以符号名后缀的形式呈现,前面加上@字符,比如foo@VER_1。要是该版本是解析未版本化符号引用时的默认版本,后缀前则加两个@字符,即foo@@VER_2
-e, --headers 可以展示文件中的所有头信息,效果等同于同时使用-h -l -S这三个参数
-n, --notes 若文件包含NOTE段和(或)节,使用此参数可展示其内容
-r, --relocs 用于展示文件重定位节的内容(若文件存在该节)
-u, --unwind 用于展示文件展开节的内容(仅支持IA64 ELF文件的展开节以及ARM展开表,即.ARM.exidx.ARM.extab)。如果针对您的架构尚未实现支持,可尝试利用--debug-dump=frames--debug-dump=frames-interp参数来转储.eh_frames节的内容
-d, --dynamic 若文件存在动态节,使用此参数可展示其内容
-V, --version-info 用于展示文件中版本节的内容(若存在版本节)
-A, --arch-specific 若文件包含特定于架构的信息,此参数可将其展示出来
-x , --hex-dump= 把指定的节内容以十六进制字节形式展示。其中,数字代表节表中的索引,用于指定特定的节;而其他字符串则会匹配目标文件中所有具有该名称的节
-p , --string-dump= 将指定节的内容展示为可打印字符串。同样,数字通过节表索引指定节,其他字符串匹配同名节
-w, --debug-dump 用于展示文件中DWARF调试节的内容(若存在)。压缩的调试节在展示前会自动临时解压缩。在--debug-dump后添加不同的字母或单词,可指定展示特定类型的调试信息,如=info展示.debug_info节内容、=abbrev展示.debug_abbrev节内容等
-v, --version 用于展示readelf的版本号
-W, --wide 默认情况下,readelf会对64位ELF文件的节头和段列表行进行换行处理,以适配80列的显示宽度。使用此参数后,readelf会在单行中打印每个节头或每个段,在宽度超过80列的终端上查看时可读性更高
-H, --help 用于展示readelf可识别的命令行选项
posted @   绿草蓝天  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
点击右上角即可分享
微信分享提示