1 time

这命令在linux比较好用,可以查看你使用的文件开始到结束的时间,还统计了系统反应的时间跟用户执行的时间。这命令可以简单看可执行命令执行的时间,对于一些需要搞效率的编程帮助很大。

real 0m0.007s

user 0m0.000s

sys 0m0.004s

2 readelf

用于查看elf文件的信息,关于elf我也不太清楚,是可执行链接格式,其中so库就是一种,可用来查看so库中的符号信息:

readelf –s libname

3 objdump -t

也可查看符号信息,与readelf不同的是只显示了.symtab部分的信息.

-s参数可以将所有段的内容以十六进制的方式打印出来,

-d参数可以将所有包含指令的段反汇编;

-h参数是将ELF文件的各个段的基本信息打印出来,

-x参数可以将更多的信息打印出来

4 nm 
nm用来列出目标文件中的符号,可以帮助程序员定位和分析执行程序和目标文件中的符号信息和它的属性。

4 file

file 
原来用这个命令即可以看到文件的类型了。

 

关于目标文件中信息的存储形式:

会根据不同的属性将这些信息以“段”的形式存储;

程序源代码编译后的机器指令经常被放在代码段(Code Section)里,代码段常见的名字有“.code”或是“.text”;全局变量和局部静态变量数据放在数据段(Data Section),数据段名字为“.data”,未初始化的全局变量和局部静态变量默认值都为0,本在他们可以放在.data段,但是因为都是0,所以为他们在.data段分配空间并且存放数据0是没有必要的,所以放在.bss段,.bss段只是为未初始化的全局变量和局部静态变量预留位置而已,它并没有内容,所以它在文件中也不占据空间。

ELF文件的开头是一个“文件头”,它描述了整个文件的文件属性,包括文件是否可执行、是静态链接还是动态链接及入口地址(如果是可执行文件)、目标硬件、目标操作系统等信息,文件头还包括一个段表(Section Table),

总体来说,程序源代码被编译以后主要分成两种段:程序指令和程序数据。代码段属于程序指令,而数据段和.bss段属于程序数据。

其实还有几个段:

.rodata:只读数据段

.comment:注释信息段

.note.GNU-stack:堆栈提示符