曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2974|回复: 0
打印 上一主题 下一主题

strings --- 打印文件中的可见字符

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-10-23 19:31:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该命令主要是用来搜索并打印 UNIX 二进制文件中的字符串信息,这样对于想了解可执行文件中相关信息的用户是十分有用的。


以下面的小程序为例:
[C++] 纯文本查看 复制代码
#include <stdio.h>

int main()
{
        char url[] = "www.groad.net";
        printf ("welcome to ");
        system("ls");
        printf ("%s", url);

        return 0;
}

将程序编译成可执行文件:
gcc exp.c -o exp
直接将 strings 作用于该程序:
beyes@beyes  :~/command/strings> strings exp
/lib/ld-linux.so.2
__gmon_start__
libc.so.6
_IO_stdin_used
printf
system
__libc_start_main
GLIBC_2.0
PTRh@
QVhl
www.
groa
d.nef
[^_]
welcome to
;*2$"
strings 默认情况呢下,输出的每行字符串至少 4 个字节,因此可以看到在输出数组中的字符串时,初始化字符串被分为 3 个部分来输出。如果仔细观察,可以看到数组中原本为 d.net 的却输出为 d.nef ( t 输出为 f,处于第 5 个字符位置)。根据 strings 的 man 手册里的说明,在输出的每行中,后面会跟着输出一个非可打印字符,因此 t 被输出成 f 也是便也得到了解释。这种情况多见于初始化区域,如上面对数组进行的初始化。为此,也不能指望 strings 可以打印出完全精确的信息。如果将上面的 www.groad.net 随便改为 www.groad.netttttttttt ,再用 strings 观察时,会发现更多的不可打印字符(乱码),它们看起来倒像是分隔符号。实际上,使用 strings 并不需要纠结于此。

上面的输出只是简略的输出,默认情况下,strings 只会输出已初始化内容及已装载的区段(section),如果想查看全部内容,那么使用 -a 选项:
strings -a exp
/lib/ld-linux.so.2
__gmon_start__
libc.so.6
_IO_stdin_used
printf
system
__libc_start_main
... ...
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
... ...
_Jv_RegisterClasses
__TMC_END__
_ITM_registerTMCloneTable
_init
上面的输出结果中包含了所有的区段名等信息。

可以利用 strings 找出应用程序相应的版权信息:
beyes@beyes  :~/command/strings> strings /bin/ls |grep Copyright
Copyright %s %d Free Software Foundation, Inc.

使用 -o 选项打印出文本字串在文件中的偏移:
beyes@beyes  :~/command/strings> strings -o exp
    524 /lib/ld-linux.so.2
   1131 __gmon_start__
   1150 libc.so.6
   1162 _IO_stdin_used
   1201 printf
   1210 system
   1217 __libc_start_main
   1241 GLIBC_2.0
   1610 PTRh@
   1625 QVhl
   2171 www.
   2201 groa
   2211 d.nef
   2454 [^_]
   2540 welcome to
   2727 ;*2$"
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 21:15 , Processed in 0.079298 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表