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

  • 快速查看工具

    • 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>
      

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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/344145

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午2:31
下一篇 2023年3月2日 上午2:31

相关推荐