首页 > 编程语言 > 详细

C/C++编译技术——Linux工具集

时间:2020-04-24 18:53:22      阅读:76      评论:0      收藏:0      [点我收藏+]
  • 快速查看工具

    • file

      file工具可以查看几乎任何类型文件的详细信息,可以查看二进制文件的绝大多数基本信息。

    • size

      size工具能够快速获取ELF节的字节长度信息。

  • 详细分析工具

    • ldd

      ldd可以显示出客户二进制文件启动时需要加载的动态库的完整列表。

      ldd的限制:

      • ldd无法识别出运行时通过调用dlopen()函数动态加载的动态库。

      • 运行某些版本的ldd可能会导致安全问题。

      更安全的替代方法:

      objdump -p /path/to/program | grep NEEDED
      readelf -d /path/to/program | grep NEEDED

      但这两个工具只会读取二进制文件的直接依赖项的列表,而不会再去分析其间接依赖性。

    • nm

      nm程序可以列出二进制文件的符号列表,可以输出符号并显示对应的符号类型。

      • 列出二进制文件的所有符号

        nm <path>
      • 只列出动态节中的符号,即共享库中导出的或对外可见的符号

        nm -D <path>
      • 列出未经过名称修饰的格式

        nm -C <path>
      • 打印出共享库中名称修饰后的动态符号

        nm -D --no-demangle <path>
      • 在相同目录下的二进制文件中搜索符号,将所有在库中找到的符号打印出来

        nm —A <path>/* | grep symbol-name
      • 列出库中未定义的符号

        nm -u <path>
    • objdump

      • 解析ELF头

        获取目标文件头信息,通过ELF头信息快速获取二进制文件类型(目标文件、静态库、动态库和可执行文件)和入口信息。

        objdump -f <path>
      • 列出并查看节信息,列出所有二进制文件的节

        objdump -h <path>
      • 列出所有符号

        objdump -t <path>                //与nm <path>效果相同
      • 只列出动态符号

        objdump -T <path>                //与nm -D <path>效果相同
      • 查看动态节或段

        objdump -p <path>                //输出的第一部分是段的名称
      • 查看重定位节

        objdump -R <path>
      • 查看节中的数据

        objdump -s -j <节名称> <path>
      • 反汇编代码

        objdump -d -Mintel <path>        //    Intel风格
    • readelf

      readelf的功能在objdump工具中都可以找到,但两者有区别:

      1. readelf只支持ELF二进制格式,objdump可以解析包括Windows PE/COFF格式。

    1. readelf不依赖二进制文件描述库。GUN的所有目标文件解析工具都依赖这个库。

    • 解析ELF头

      readelf -h <path>
    • 列出并查看节信息

      readelf -S <path>
    • 列出所有符号

      readelf --symbols <path>        //与nm <path>效果相同
    • 只列出动态符号

      readelf --dyn-syms <path>        //与nm -D <path>效果相同
    • 查看动态节

      readelf -d <path>                //rpath
    • 查看重定位节

      readelf -r <path>
    • 查看节中的数据

      readelf -x <path>
    • 列出并查看段

      readelf -segments <path>

       

     

C/C++编译技术——Linux工具集

原文:https://www.cnblogs.com/w1ng/p/12768842.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!