理解可执行程序的各种神器
ldd查看应用程序链接了哪些动态库。
nm列出目标文件中包含的符号信息。
size列出各个段的大小及总的大小。
strings列出文件中的字符串。
readelf读取elf文件的完整结构。
objdump导出目标文件的相关信息(elf文件相关工具的源头)。
gdb对文件的执行过程进行调试分析,设置断点(b)、单步执行(n)、函数调用追踪(bt)、反汇编(disassemble)。
strace跟踪程序中的系统调用及信号处理信息。
LD_DEBUG通过设置这个环境变量,可以方便的看到 loader 的加载过程(包括库的加载,符号解析等过程),使用【LD_DEBUG=help 可执行文件路径】可查看使用帮助。
LD_PRELOAD环境变量指定的共享库会被预先加载,如果出现重名的函数,预先加载的函数将会被调用,如在预先加载的库中包含自定义的puts函数,则在执行程序时将使用自定义版本的puts函数,而不是libc库中的puts函数。
proc文件系统中包含进程的地址空间映射关系,具体查看/proc/进程id/maps文件的内容。
valgrind工具对可执行程序文件进行内存检查(还有cache模拟、调用过程跟踪等功能),以避免内存泄露等问题。
addrline将可执行文件中的地址转换为其在源文件中对应的位置(文件名:行号)。
pmap查看进程占用的内存及使用地址空间映射。