readelf
readelf可以用来查看一个可执行文件的信息,例如:
readelf -a a.out | less
objdump
objdump是一个用于查看目标文件(如可执行文件、共享库、静态库等)信息的工具,它可以显示目标文件的各种信息,包括符号表、段信息、反汇编代码等。以下是一些常用的 objdump 选项:
- -d, –disassemble:显示反汇编代码。
- -t, –syms:显示符号表。
- -h, –section-headers:显示目标文件的段(section)头信息。
- -x, –all-headers:显示全部头信息(包括段头和符号表等)。
- -s, –full-contents:显示目标文件的完整内容,包括所有段的十六进制内容。
- -f, –file-headers:显示文件头信息。
- -R, –dynamic-reloc:显示动态重定位表。
gcc
在gcc编译时也可以加入一些选项使得可以查看的内容更多:
- –verbose:查看所有的编译选项。
- -Wl,–verbose:查看所有的链接选项。
- -static:静态链接,会链接libc。
strace
strace 是一个用于跟踪程序系统调用的工具,常用的选项包括:
- -e trace=set:指定需要跟踪的系统调用,set 可以是以下之一或多个:
- file:文件操作
- network:网络操作
- process:进程控制
- signal:信号处理
- syscall:所有系统调用
- -p PID:跟踪指定PID的进程。
- -o filename:将输出写入到指定的文件中。
- -f:跟踪由被跟踪进程创建的子进程。
- -t:在输出中显示时间信息。
- -c:统计每个系统调用的次数、时间和错误数量等信息。
- -s strsize:限制输出字符串的最大长度。
- -v:打印出系统调用的参数详细信息。