zoukankan      html  css  js  c++  java
  • linux中的strings命令

     strings - print the strings of printable characters in files.  
     
           意思是, 打印文件中可打印的字符。  我来补充一下吧, 这个文件可以是文本文件(test.c), 可执行文件(test),  动态链接库(test.o), 静态链接库(test.a)

    在对象文件或二进制文件中查找可打印的字符串。

    语法
    strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [ File ... ]

    描述

    strings 命令在对象文件或二进制文件中查找可打印的字符串。字符串是 4 个或更多可打印字符的任意序列,以换行符或空字符结束。 strings 命令对识别随机对象文件很有用。


    标志

    -a 或 - 搜索整个文件,而不仅仅是数据段,以寻找可打印的字符串。如果省略这个标志,则 strings 命令只在对象文件的初始化数据空间内寻找。
    -n Number 指定最小的字符串长度(除了缺省的 4 个字符以外)。字符串长度的最大值是 4096。这个标志与 -Number 标志相同。
    -o 列出文件中每个跟随在其八进制偏移量之后的字符串。这个标志与 -t o 标志相同。
    -t Format 列出从文件最开始起,每个跟随在其偏移量之后的字符串。该格式取决于用作 Format 变量的字符。
    d
    以十进制写下偏移量。
    o
    以八进制写下偏移量。
    x
    以十六进制写下偏移量。
     

    注:当 -o 和 -t Format 标志在一个命令行上多次定义,则最后指定的标志控制 strings 命令的行为。
    -Number 指定最小的字符串长度(除了缺省的 4 个字符以外)。字符串长度的最大值是 4096。这个标志与 -n Number 标志相同。
    File 要搜索的二进制文件或对象文件。

    退出状态

    该命令返回以下退出值:


    0 表示命令成功运行。
    >0 表示出错。

    示例
    要搜索文件,请输入:
     

    strings strings
    strings 命令显示:

    @(#)56
    1.17 com/cmd/scan/strings.c, cdmscan, bos320 5/7/92 10:21:20
    标准输入
    strings.cat
    /usr/mbin/strings
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    %7o
    %7d
    %7x
    %7o
    %7d
    要搜索至少有 12 个字符的字符串,请输入:
     

    strings -12 strings
    strings 命令显示:

    1.17 com/cmd/scan/strings.c, cdmscan, bos320 5/7/92 10:21:20
    标准输入
    /usr/mbin/strings
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    要搜索至少有 20 个字符的字符串,并以十六进制来显示偏移量,请输入:
     

    strings -t x -n 20 strings
    strings 命令显示:

    1017 1.17 com/cmd/scan/strings.c, cmdscan, bos320 5/7/92 10:21:20
    108c Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    10d8 Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    1124 Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    1170 Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]
    11bc Usage: strings [-a | -] [-o] [-t format] [-n | -#] [file...]

     strings命令很简单, 看起来好像没什么, 但实际有很多用途。 下面, 我来举一个例子。  在大型的软件开发中, 假设有100个.c/.cpp文件, 这个.cpp文件最终生成10个.so库, 那么怎样才能快速知道某个.c/.cpp文件编译到那个.so库中去了呢? 当然, 你可能要说, 看makefile不就知道了。 对, 看makefile肯定可以, 但如下方法更好, 直接用命令:
          strings -f "*.so" | grep "xxxxxx"
     
          如果还不明白, 那就就以上面的小程序为例为说明, 不过, 此处我们考虑所有的文件, 如下:
    1 [taoge@localhost learn_c]$ strings -f * | grep "my dear"
    2 a.out: oh, my dear, c is %d
    3 test.c:     printf("oh, my dear, c is %d
    ", c);
    4 [taoge@localhost learn_c]$ 
    可以看到, 源文件test.c和可执行文件中皆有"my dear"串, 一下子就找到了对应的文件,清楚了吧。如果某.c/.cpp文件编译进了.so库, 那么,strings -f * | grep "my dear"必定可以找到对应的.so文件, 其中"my dear"为该.c/.cpp文件中的某个日志串(比如以printf为打印)。
     
  • 相关阅读:
    Extjs4 关于设置form中所有子控件为readOnly属性的解决方案
    Chrome调试(转)
    ExtJS4 动态加载
    CSS display和visibility的用法和区别
    利用Java调用OpenCV进行人脸识别
    Mac上安装openCV(Java版本)
    关于mysql的Fetch Time 和 Duration Time
    数据库相关中间件介绍
    JVM和java应用服务器调优
    探索 ConcurrentHashMap 高并发性的实现机制
  • 原文地址:https://www.cnblogs.com/klb561/p/10765464.html
Copyright © 2011-2022 走看看