undefined

linux下二进制文件分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
1. file
分析文件的基本格式
2. ldd
查看二进制文件的动态链接库信息
3. nm
可以列出二进制文件的动态库、静态库中的符号信息,包括符号的类型、符号的名称,比如函数名,全局变量等
nm -a | grep xxx
nm -D 查看动态库符号信息
4. strings
查看二进制文件的字符串信息。strings会把任何可打印字符串都显示出来,比nm的内容更多
5. objdump
将二进制代码转为汇编指令
如果程序是以 -g -o0 等调试不优化的情况下,用 objdump -S 指令可以尽可能还原源代码信息,其实也可以理解这些信息是完整的在可执行文件中,要不然gdb调试的时候无法单步追踪
6. readelf
读取ELF文件格式。通过file文件可以查看文件格式。使用readelf指令可以方便分析ELF文件结构,比如节信息,elf头文件信息
7. ltrace
跟踪进程调用库函数过程
可以查看程序执行的时候调用库函数信息,还可以在线查看执行的进程的库函数调用情况
ltrace -T 查看调用时间开销
ltrace -t/-tt/-ttt 查看调用绝对时间,t越多越精确
ltrace -S 查看系统调用信息
8. strace
strace 和 ltrace 命令差不多,strace 更偏向系统调用的追踪或信息产生的情况
可以指定系统调用的类型
-e trace=set
只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all.
-e trace=file
只跟踪有关文件操作的系统调用.
-e trace=process
只跟踪有关进程控制的系统调用.
-e trace=network
跟踪与网络有关的所有系统调用.
-e strace=signal
跟踪所有与系统信号有关的 系统调用
-e trace=ipc
跟踪所有与进程通讯有关的系统调用
-e abbrev=set
设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set
将指 定的系统调用的参数以十六进制显示.
-e signal=set
指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.
-e read=set
输出从指定文件中读出 的数据.例如:
-e read=3,5
-e write=set
9. gdb
调试