- 论坛徽章:
- 0
|
在介绍什么是“ELF文件”前先做个小实验。
我这里有这么个文件-hello.c,内容如下:
/*filename:hello.c*/
#include
int main()
{
printf("hello,world!\n");
return 0;
}
好了我执行下面的一些命令:
$ gcc -c -o hello.o hello.c
$ gcc -o hello hello.o
$ ls
hello hello.c hello.o
我的目的很简单,就是想让你接触一下“ELF文件”。
用vim分别打开hello.o和hello,你会发现,这两个文件的第2,3,4个字节都分别是‘E’,‘L’,‘F’。
另外,你再用vim打开/usr/lib/libd1.so,你也会发现,这个文件与上两个一样,它的第2,3,4个字节也是‘E’,‘L’,‘F’。
把文件看作字节流,该字节流的第2,3,4个字节是不是‘E’,‘L’,‘F’将成为决定该文件是不是ELF文件的一个重要因素。(但不是说满足此条件就是ELF文件,下一篇文章会讲到。)
我可以明确地说,上面的三个文件都是ELF格式的文件。它们分别是目标文件(hello.o),可执行文件(hello)和库文件(libd1.so)。
现在请你记住,linux中的ELF文件包括三类:可重定位文件(也就是通常说的目标文件,后缀为.o,如上面的hello.o);可执行文件文件(如hello);共享文件(也就是库文件,通常存放于/usr/lib目录下,后缀为.so,如libd1.so)。
Executable and Linking Format是可执行可连接格式,简称就是ELF。
ELF是一种格式,上面的三个文件都是符合ELF格式规范的文件。(顺便附上baidu百科的连接:http://baike.baidu.com/view/1090277.htm)
好了,现在你知道什么是ELF文件了吧!
可它为什么叫这样一个难听的名字呢?当然是有原因的。
上面的三个文件,它们都是ELF文件,当我们想要得到一个可执行程序的话就离不开这三类文件。
所以说ELF是跟编译器,操作系统密切相关的,我们通过它的格式也可以大略的知道一些操作系统,编译器这两个古板的伙计的一些思考方式。
Powered by Leafteg
作者水平所限,表达必然不甚准确,如有纰漏或好的建议,请与作者联系。
e-mail:leafteg@gmail.com
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104443/showart_2062829.html |
|