mips-linux-gnu-gprof:
打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。产生程序运行时候的函数调用关系,包括调用次数,可以帮助程序员分析程序的运行流程。
Gprof的原理就是在加上-pg选项上,在编译和链接的时候,编译器在每个函数中都加入了一个名为gcount的函数,每个运行函数都会调用它,用来在内存中生成函数调用图。非常有用的一个工具,这里只是一个皮毛,等下次深入分析它的线程。
Gporf参数简介:
-p得到每个函数占用的执行时间
-q得到call graph,包含了每个函数的调用关系,调用次数,执行时间等信息
-A得到一个带注释的“源代码清单”,它会注释源码,指出每个函数的执行次数。这需要在编译的时候增加 -g选项。
Gprof使用实例:
dyron@harris-desktop:~/misc/module/test/tmp$ gcc -pg a.c -o filt
dyron@harris-desktop:~/misc/module/test/tmp$ gprof -b filt gmon.out
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
%
cumulative
self
self
total
time
seconds
seconds
calls
Ts/call
Ts/call
name
0.00
0.00
0.00
1
0.00
0.00
a
0.00
0.00
0.00
1
0.00
0.00
b
0.00
0.00
0.00
1
0.00
0.00
c
Call graph
granularity: each sample hit covers 4 byte(s) no time propagated
index % time
self
children
called
name
0.00
0.00
1/1
b [2]
[1]
0.0
0.00
0.00
1
a [1]
-----------------------------------------------
0.00
0.00
1/1
main [7]
[2]
0.0
0.00
0.00
1
b [2]
0.00
0.00
1/1
c [3]
0.00
0.00
1/1
a [1]
-----------------------------------------------
0.00
0.00
1/1
b [2]
[3]
0.0
0.00
0.00
1
c [3]
-----------------------------------------------
Index by function name
[1] a
[2] b
[3] c
mips-linux-gnu-size
:
显示一个目标文件或者链接库文件中的目标文件的各个段的大小。
Size的参数简介:
-A –B:
选择以sysv|berkeley的样式输出。
-o|-d|-x : 选择输出数据的格式.
-t :
选择全部输出。
Size 的使用实例:
[tulip]dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-size filt
text
data
bss
dec
hex filename
1477
280
12
1769
6e9 filt
mips-linux-gnu-as:
GNU AS是GNU汇编器,主要用于把汇编代码转换成二进制代码,并存放到一个object文件中。
大家都知道从源码到程序分为4个过程,AS做的工作就是第3步,将汇编指令码转换为二进制的文件。
As 的使用实例(可用gcc-c hello.s –o hello.o代替):
Mips-linux-gnu-as hello.s –o hello.o
mips-linux-gnu-strings:
strings的功参简单,就是显示文件中的可打印字符, 常用来在二进制文件中查找字符串。
Strings的参数简介:
-a
不只是扫描目标文件初始化和装载段, 而是扫描整个文件.
-f
在显示字符串之前先显示文件名.
-n min-len 打印至少min-len 字符长的字符串. 默认的是4.
-t {o,x,d} 在字符串前面显示其在文件中的偏移量. 选项中的单个字符指定偏移量的进制是八进制, 十六进制,还是十进制.
--target=bfdname 指定一种目标代码格式来代替你的系统的默认格式.
Strings 的使用实例:
[tulip]dyron@harris-desktop:~/misc/module/test/tmp$ mips-linux-gnu-strings /usr/bin/uptime
//将会显示uptime中的字符串, 默认是以4的最少长度。
mips-linux-gnu-objcopy:
可以将一种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。
它使用 GNU BFD(binary format description) 库读 / 写目标文件,通过这个 BFD 库,objcopy 能以一种不同于源目标文件的格式生成新的目标文件
Objcopy命令的常用参数(太有用的命令了,参数一大堆):
-I bfdname或—input-target=bfdname用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则objcopy自己分析
-O bfdname 输出的格式
-F bfdname 同时指明源文件,目的文件的格式
-R sectionname 从输出文件中删除掉所有名为sectionname的段
-S 不从源文件中复制重定位信息和符号信息到目标文件中
-g 不从源文件中复制调试符号到目标文件中
Objcopy 的使用实例:
objcopy -I binary -O elf32-i386 -B i386 inputfile outputfile |