freebsd可执行程序格式

freebsd可执行程序格式

ID:9486116

大小:58.50 KB

页数:9页

时间:2018-05-01

freebsd可执行程序格式_第1页
freebsd可执行程序格式_第2页
freebsd可执行程序格式_第3页
freebsd可执行程序格式_第4页
freebsd可执行程序格式_第5页
资源描述:

《freebsd可执行程序格式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、FreeBSD可执行程序格式  在FreeBSD下的可执行程序通常可分为两类,一类为使用各种解释语言编写的脚本,如sh、ap;T最初设想的全部目的,但这种文件格式却成为最流行的执行文件格式。除此之外,实际使用的文件格式还有一种较老的COFF格式,这种格式是在UnixSystemVR3.2中使用的,当前只有老版本的SCOUnix中还在使用它,而SCO也正逐渐转向ELF格式。  FreeBSD可以同时支持这两种执行文件的格式,FreeBSD2.2.x之前的版本使用a.out格式作为缺省的执行文件格式,到FreeBSD3.x之后EL

2、F格式成为缺省的执行文件格式,并且以后会彻底转向ELF。事实上在FreeBSD下的a.out格式具备了相当多的特性,如动态连接等ELF格式具备的特性,也有一些ELF格式不具备的特性,如压缩执行文件格式。但由于FreeBSD中使用的编译器gcc决定不再支持a.out格式的缘故,因此FreeBSD也必须转向ELF格式。这也是当前还支持a.out格式的FreeBSD版本缺省使用较老版本编译器的原因之一。  在FreeBSD中,a.out格式的执行文件可以支持压缩执行格式,这使得使用gzip压缩过的a.out格式的执行文件也能立即执行

3、,当前还不能对ELF格式的文件提供这种支持。  FreeBSD的文件格式从aout到ELF的转变是渐变的,首先是在3.0-RELEASE中将执行程序的缺省格式转变为ELF格式,内核文件还保持aout格式,直至FreeBSD-3.1,全部执行文件格式才缺省设置为ELF格式。  转向ELF也造成很多相关程序的转变,如原有的BootLoader不支持ELF格式的内核,3.1-RELEASE就升级到新BootLoader;而原有的可加载模块lkm为aout格式,也需要转向ELF格式的modules。新可加载模块的位置为/modules

4、目录,并使用kldload、klduload、kldstat来进行管理。(aout格式的模块管理命令为modload、modstat和modunload)。  a.out和ELF格式使用的库文件也是不同的,使用ELF执行文件格式的FreeBSD3.x中,/usr/lib下为ELF格式的函数库,而用一个子目录/usr/lib/aout存放a.out格式的函数库,用于兼容2.2.x之前版本的FreeBSD程序。但这给一些使用包装技术的软件(一些中文外挂系统)造成了一些小麻烦。对不同格式的执行文件要使用不同的包装库,系统不会将与程序

5、本身格式不同的连接库连接到程序上,对应的错误信息为badmagic,指出文件格式的不同。  由于3.x之后的缺省格式为elf格式,为了生成a.out格式的文件,必须在编译和连接时使用-aout参数,告诉编译器gcc和连接器ld使用不同的格式生成执行文件。静态连接和动态连接  在操作系统发展的早期,除了内核提供的接口,所有的库函数都要连接到程序中,这样所有的程序都可以直接在系统内核下运行。然而事实上大部分程序都会使用一些相同的库函数,尤其是在使用高级语言编程的时候,通常都使用同样的库。例如,C语言编写的程序通常都使用printf

6、函数进行输出,使用scanf读入用户输入内容。如果每个库函数都连接到用户程序中,这样每个程序都会包括这个函数的一个拷贝,就浪费了内存空间。  因此,现代操作系统使用动态连接的技术,不将常用的库直接编译进每个程序中,而是保留相应的接口,在内核载入程序时,再使用动态连接程序将库载入并和执行程序连接起来。这就是动态连接的技术,由于库和程序是分别载入的,因此多个程序可以共享一个库的同一个拷贝,节约了资源。  不论对于a.out格式还是ELF格式,FreeBSD均支持动123下一页——感谢阅读这篇文章,..,态连接,因此应用程序缺省就使

7、用动态连接的方式。如果想使用静态连接,可以在应用程序编译连接时,指定-static连接选项,将目标程序连接成静态连接的执行文件。由于库代码被连接进执行文件中,静态连接的执行文件要比动态连接的执行文件要大。$cc-static-oa1hello.c$cc-oa2hello.c$ls-l a1a2-rcap.so.2=>/usr/lib/libtermcap.so.2(0x2809a000)    libc.so.3=>/usr/lib/libc.so.3(0x2809f000)  其他系统的执行文件  很多其他Uni

8、x系统,例如BSD/OS和Linux,也是运行在Intel平台上的系统,那么执行程序中的处理器指令是完全相同的,不同之处只在于应用程序的格式、应用程序与操作系统的接口、库文件等。事实上由于同为Unix系统,这些差异也很小,因此通过调整内核的一些参数设置,FreeBSD完全可以

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。