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:打印出系统调用的参数详细信息。