file工具可以查看几乎任何类型文件的详细信息,可以查看二进制文件的绝大多数基本信息。
size工具能够快速获取ELF节的字节长度信息。
ldd可以显示出客户二进制文件启动时需要加载的动态库的完整列表。
ldd的限制:
ldd无法识别出运行时通过调用dlopen()函数动态加载的动态库。
运行某些版本的ldd可能会导致安全问题。
更安全的替代方法:
objdump -p /path/to/program | grep NEEDED
readelf -d /path/to/program | grep NEEDED
但这两个工具只会读取二进制文件的直接依赖项的列表,而不会再去分析其间接依赖性。
nm程序可以列出二进制文件的符号列表,可以输出符号并显示对应的符号类型。
列出二进制文件的所有符号
nm <path>
只列出动态节中的符号,即共享库中导出的或对外可见的符号
nm -D <path>
列出未经过名称修饰的格式
nm -C <path>
打印出共享库中名称修饰后的动态符号
nm -D --no-demangle <path>
在相同目录下的二进制文件中搜索符号,将所有在库中找到的符号打印出来
nm —A <path>/* | grep symbol-name
列出库中未定义的符号
nm -u <path>
解析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的功能在objdump工具中都可以找到,但两者有区别:
readelf只支持ELF二进制格式,objdump可以解析包括Windows PE/COFF格式。
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