UNIX/LINUX 平台可执行文件格式分析
入初始化段.init和结束段.fini(分别对应构造函数和析构函数)则主要是为了支持C++程序。1994年6月ELF格式出现在LINUX系统上,现在ELF格式作为UNIX/LINUX最主要的可执行文件格式。当然我们完全有理由相信,在将来还会有新的可执行文件格式出现。
上述三种可执行文件格式都很好的体现了设计思想中分层的概念,由一个总的头部刻画了文件的基本要素,再由若干子头部/条目刻画了文件的若干细节。比较一下可执行文件格式和以太数据包中以太头、IP头、TCP头的设计,我想我们能很好的感受分层这一重要的设计思想。 参考资料 21从全局的角度讨论了各种文件的格式,并提出一个比较夸张的结论:Everything Is Byte!
最后的题外话:大多数资料中对a.out格式的评价较低,常见的词语有黑暗年代(dark ages)、丑陋(ugly)等等,当然,从现代的观点来看,的确是比较简单,但是如果没有曾经的简单何来今天的精巧?正如我们今天可以评价石器时代的技术是ugly,那么将来的人们也可以嘲讽今天的技术是非常ugly。我想我们也许应该用更平和的心态来对曾经的技术有一个公正的评价。
参考资料
《 A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux 》 breadbox
《 The Linux Virus Writing And Detection HOWTO》Alexander Bartolich
《 从程序员角度看ELF》Hongjiu Lu alert7(译)
《 XCOFF Object File Format》
《 Executable and Linkable Format(ELF)》
《 如何修改动态库符号表》wangdb
《 分析ELF的加载过程》opera
《 Before main() 分析》 alert7
《 Linkers & Loaders》John R. Levine
《 Running a.out executables on modern Red Hat Linux》
《 Cheating the ELF》
《 Manual Reference Pages - A.OUT (5)》
《 Linux下缓冲区溢出攻击的原理及对策》
《 Microsoft Portable Executable and Common Object File Format Specification》
《 COFF的文件结构》redleaves
《 Everything Is Byte》 mala