UNIX/LINUX 平台可执行文件格式分析
本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link
editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format
通用对象文件格式)、ELF(Executable and Linking Format
可执行和链接格式)。首先是对可执行文件格式的一个综述,并通过描述 ELF
文件加载过程以揭示可执行文件内容与加载运行操作之间的关系。随后依此讨论了此三种文件格式,并着重讨论 ELF
文件的动态连接机制,其间也穿插了对各种文件格式优缺点的评价。最后对三种可执行文件格式有一个简单总结,并提出作者对可文件格式评价的一些感想。
可执行文件格式综述
相
对于其它文件类型,可执行文件可能是一个操作系统中最重要的文件类型,因为它们是完成操作的真正执行者。可执行文件的大小、运行速度、资源占用情况以及可
扩展性、可移植性等与文件格式的定义和文件加载过程紧密相关。研究可执行文件的格式对编写高性能程序和一些黑客技术的运用都是非常有意义的。
不
管何种可执行文件格式,一些基本的要素是必须的,显而易见的,文件中应包含代码和数据。因为文件可能引用外部文件定义的符号(变量和函数),因此重定位信
息和符号信息也是需要的。一些辅助信息是可选的,如调试信息、硬件信息等。基本上任意一种可执行文件格式都是按区间保存上述信息,称为段
(Segment)或节(Section)。不同的文件格式中段和节的含义可能有细微区别,但根据上下文关系可以很清楚的理解,这不是关键问题。最后,可
执行文件通常都有一个文件头部以描述本文件的总体结构。
相对可执行文件有三个重要的概念:编译
(compile)、连接(link,也可称为链接、联接)、加载(load)。源程序文件被编译成目标文件,多个目标文件被连接成一个最终的可执行文
件,可执行文件被加载到内存中运行。因为本文重点是讨论可执行文件格式,因此加载过程也相对重点讨论。下面是LINUX平台下ELF文件加载过程的一个简
单描述。
1:内核首先读ELF文件的头部,然后根据头部的数据指示分别读入各种数据结构,找到标记为可加载
(loadable)的段,并调用函数 mmap()把段内容加载到内存中。在加载之前,内核把段的标记直接传递给
mmap(),段的标记指示该段在内存中是否可读、可写,可执行。显然,文本段是只读可执行,而数据段是可读可写。这种方式是利用了现代操作系统和处理器
对内存的保护功能。著名的Shellcode( 参考资料 17
)的编写技巧则
相关文档:
说明:
大家好,我用的是虚拟机下linux环境进行安装的oracle 11g 数据库,有些不妥的地方请多多指教。
首先要参考原版的安装使用说明文档,根据上面的描述的要求进行安装操作。
如下是手动操作的方法:
一.检查linux环境RPM包的是否完全安装,并记录缺少的RPM包文件并进行安装。
[root@mylinux ~]# r ......
dnw in linux
Use xterm as a serial terminal. In Fedora 9
use "yum install screen" to install screen package.
Plug the USB-UART cable, see if there is a ttyUSB0 in /dev
Enter "screen /dev/ttyUSB0 115200,cs8,-ixon,-ixon,istrip" to connect to USB-UART.
Screen as Serial Terminal
Download the ......
今天碰到个问题,中文文件和带中文的目录通过SVN取到WINDOWS系统,然后通过SCP传到LINUX服务器之后,出现了文件名及目录名编码集改变的问题。(都变成了GBK)
最后通过下载一个linux专门用于转换 文件名和目录名 的工具,convmv
转换指令如下:
convmv -f [原始编码] -t [目标编码] -r(目录循环) --notest(实际改变,否 ......
###########################################
### 挂载网络文件夹 ###
###########################################
NFS说明
=======
NFS是Net File System的简写,即网络文件系统.
NFS允许一个系统在网络上与它人共享目录和文件。通过使用NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件。 ......
CPU查看:
1、 # dmesg | grep CPU
Initializing CPU#0
CPU: Trace
cache: 12K uops
CPU: L1 I-cache: 0K, L1 D-cache: 16K
CPU: L2
cache: 256K
Intel machine check reporting enabled on CPU#0.
CPU: After generic, caps: bfebfbff 00000000 00000000 00000000
CPU ......