strings和nm命令

strings

一.简介:

显示文件中的可打印字符

二.用法

strings [option(s)] [file(s)]

选项说明:

-a – –all 扫描整个文件而不是只扫描目标文件初始化和装载段(缺省时,是只扫描初始化和装载段)

-f –print-file-name 在显示字符串前先显示文件名

-n –bytes=[number] 找到并且输出所有NUL终止符序列

- 设置显示的最少的字符数,默认是4个字符

-t –radix={o,d,x} 输出字符的位置,基于八进制,十进制或者十六进制

-o 类似–radix=o

-T –target= 指定二进制文件格式

-e –encoding={s,S,b,l,B,L} 选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit

@ 读取中选项

三.示例:

读取二进制文件里的ASCII文本以了解可执行文件的细节

strings /bin/ls 列出ls中所有的ASCII文本

cat /bin/ls strings 列出ls中所有的ASCII文本

strings /bin/ls | grep -i libc 查找ls中包含libc的字符串,不区分大小写

 

nm命令:

 

nm(1)命令可以报告库的符号列表,对于查看库的相关信息是一个不错的工具。具体使用查看帮助文档。示例:
$nm -D libavcodec-0.4.7.so | grep 263
结果如下:
00116438 T ff_clean_h263_qscales
00122d14 T ff_h263_decode_end
001223d4 T ff_h263_decode_frame
00121340 T ff_h263_decode_init
0011048c T ff_h263_decode_mb
0011652c T ff_h263_get_gob_height
0010e664 T ff_h263_resync
00041744 T ff_h263_round_chroma
0010810c T ff_h263_update_motion_val
00115f64 T flv_h263_decode_picture_header
0010da98 T h263_decode_init_vlc
001127c8 T h263_decode_picture_header
001ab040 D h263_decoder
00106c44 T h263_encode_gob_header
0010b2b0 T h263_encode_init
00109d40 T h263_encode_mb
00105f94 T h263_encode_picture_header
001a85a0 D h263_encoder
001162d0 T h263_get_picture_format
0010a7b4 T h263_pred_motion
00106df8 T h263_send_video_packet
001ab180 D h263i_decoder
001a85e0 D h263p_encoder
00115c68 T intel_h263_decode_picture_header
其中,T表示正常代码段,D表示初始化数据段

 

file 确定文件类型的工具. 命令 file file-name将会用 ascii文本数据的形式返回 file-name文件的详细描述. 这个命令会使用 /usr/share/magic, /etc/magic, 或 /usr/lib/magic中定义的魔法数字来标识包含某种魔法数字的文件, 上边所举出的这3个文件需要依赖于具体的 Linux/UNIX 发行版.

-f选项将会让file命令运行于批处理模式, 也就是说它会分析-f后边所指定的文件, 从中读取需要处理的文件列表, 然后依次执行file命令. -z选项, 当对压缩过的目标文件使用时, 将会强制分析压缩的文件类型.

 

which command-xxx将会给出"command-xxx"的完整路径. 当你想在系统中准确定位一个特定的命令或工具的时候, 这个命令就非常有用了.

 

与上边的which很相似, whereis command-xxx不只会给出"command-xxx"的完整路径, 而且还会给出这个命令的man页的完整路径.

 

whatis filexxx将会在whatis数据库中查询"filexxx". 当你想确认系统命令和重要的配置文件的时候, 这个命令就非常重要了. 可以把这个命令认为是一个简单的man命令.

vdir显示详细的目录列表. 与ls -l的效果相似.

 

locate命令将会在预先建立好的档案数据库中查询文件. slocate命令是locate的安全版本(locate命令很有可能已经被关联到slocate命令上了).

 

readlink  显示符号链接所指向的文件.

 

使用strings命令在二进制或数据文件中找出可打印字符. 它将在目标文件中列出所有找到的可打印字符的序列. 这个命令对于想进行快速查找n个字符的打印检查来说是很方便的, 也可以用来检查一个未知格式的图片文件(strings image-file | more可能会搜索出像JFIF这样的字符串, 那么这就意味着这个文件是一个jpeg格式的图片文件). 在脚本中, 你可能会使用grep或者sed命令来分析strings命令的输出.

 

 

 

 

 

 

 

 

 

 

 

 

 

<think>好的,我现在需要帮助用户查找Linux下查看二进制文件内容的命令。首先,我需要回忆自己之前学过的相关知识,或者查看是否有相关的引用资料。根据用户提供的引用内容,引用[1]提到了nm命令,用来分析二进制文件的符号表。引用[2]引用[4]提到了xxdhexdump命令,这两个工具可以以十六进制显示文件内容。另外,od命令也是一个常用的工具,虽然用户没有直接提到,但根据我的记忆,od也是用于查看二进制文件的。 接下来,我需要确认每个命令的具体用法适用场景。比如,nm主要用于查看符号表,而xxd、hexdumpod则直接显示文件内容。用户的问题是关于显示二进制文件内容的,所以重点应该放在后者。引用[4]指出hexdumpxxd可以显示十六进制内容,hexdump还带有ASCII字符的可视输出,这可能对用户有帮助。 然后,我需要整理这些命令,并按照常用程度或功能进行分类。可能的分组是:直接查看内容的命令(xxd、hexdump、od)、分析符号的命令nm)、其他工具(比如strings)。同时,需要为每个命令提供示例,说明常用选项,如hexdump的-C选项。 还要注意用户可能需要的其他信息,比如如何安装这些工具(虽然大部分默认安装),或者如何结合其他命令(如grep)进行过滤。此外,引用[3]提到查看内核版本等命令,可能当前问题无关,但需要确保不混淆。 最后,生成相关问题,考虑用户可能的后续疑问,比如如何只显示ASCII部分,或者如何比较二进制文件,确保覆盖常见的用例。这样用户可以得到全面的信息,满足他们的需求。</think>在Linux系统中,查看二进制文件内容有以下常用命令及方法: ### 一、常用二进制文件查看命令 1. **hexdump**(十六进制转储工具) ```bash hexdump -C filename # 经典查看方式,左侧十六进制+右侧ASCII对照 ``` 支持偏移量显示、指定读取长度等特性,适合查看固件、图片等二进制文件[^4] 2. **xxd**(专用十六进制转换工具) ```bash xxd filename # 默认十六进制+ASCII双列显示 xxd -g 1 filename # 以单字节为单位分组显示 ``` 可逆向操作将十六进制转回二进制文件[^2] 3. **od**(八进制转储命令) ```bash od -tx1 filename # 以十六进制单字节格式显示 od -tc filename # 显示ASCII字符转义字符 ``` ### 二、符号表分析工具 ```bash nm -D libtest.so # 显示动态库的符号表 nm -C a.out # 显示可执行文件的函数符号(带demangle功能) ``` 通过符号表可查看函数/变量地址、类型等信息[^1] ### 三、组合应用示例 ```bash hexdump -C image.jpg | head -n 20 # 查看文件头特征 xxd -s 0x100 -l 64 data.bin # 从偏移0x100读取64字节 strings binary | grep "GLIBC" # 提取文件中的可读字符串 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值