来源:李海滨https://urlify.cn/VF7V7v01概述编译阶段nm获取二进制文件包含的符号信息字符串获取二进制文件包含的字符串常量strip去除符号二进制文件中包含的readelf显示Object文件详细信息objdump尽可能反汇编源代码addr2line根据地址找到代码行运行阶段gdb强大的调试工具ldd显示程序需要使用的动态库和实际的动态库stracelibraryfunctiontime查看程序执行时间,用户态时间,内核态时间gprof显示用户态下各个函数的执行时间valgrind检查内存错误mtrace检查内存错误其他proc文件系统系统日志02编译阶段nm(获取符号包含在二进制文件中)符号:函数、变量参数:-C将C++函数签名转换为可读形式-A列出符号名称时,显示它们来自哪个文件。-a列出所有符号(这也会列出调试符号,默认情况下不会列出调试符号)-l列出源代码中符号对应的行号(指定该参数后,nm将使用调试信息找出文件名和符号的行号,对于已定义的符号,会找到符号定义的行号,对于未定义的符号,会显示为空)-n根据文件的地址排序symbol(默认是按符号名的字母顺序)-u只列出未定义的符号字符串(获取二进制文件中的字符串常量)作用:获取二进制文件中的字符串常量用途:更重要的是检查KEY泄漏eg:strings|grep'^.\{16\}$'找出中是否有16个字符的行,并显示出来。选项:-a不仅扫描目标文件初始化和加载部分,还扫描整个文件。-f在显示字符串之前显示文件名。-nmin-len打印至少min-len个字符长的字符串。默认值为4。#strings/lib/tls/libc.so.6|grepGLIBCGLIBC_2.0GLIBC_2.1GLIBC_2.1.1...这样就可以看到glibc支持的版本了。strip(去掉二进制文件中包含的符号)用途:可执行程序减肥(一般只在已经调试测试过的生成模块上,因为不能调试)反编译,反跟踪readelf(显示目标的详细信息file)nmprogram可用于枚举符号及其类型和值,但是,要更仔细地研究目标文件中这些命名部分的内容,需要更强大的工具。其中两个强大的工具是objdump和readelf。readelf工具是一种GNU工具,用于显示有关一个或多个ELF格式文件的信息。使用不同的参数查看ELF文件的不同信息。readelf