aix xcoff可执行文件分析1
注意:分析中没有明确说明32bit,64bit模式,仅记录本人学习过程,其数据、说明可能不正确、准确,请自行核实。如果许久以后,恰逢本人无聊,也许会重新整理一个标准的说明系列出来,当然,这是遥遥无期的事情,您千万别有期待。
如果有对xcoff兴趣的同道想深入分析,欢迎留言探讨。
看起来XCOFF比ELF复杂不少,但ELF有自己的先进特点,例如自带interceptor,所以所谓复杂,并不代表xcoff有多好,只能说xcoff是老古董,一步一步扩展走过来,尾大不掉,为了兼容,只能如此了。xcoff的各种说明,介绍里有好多语义不祥的信息,本人也踩了无数的坑,如有可能,在此为后人做个垫脚石,希望大家走得轻松一些。
第一个天坑,好多概念差不多,但ibm文档里前后说明很模糊,例如重定位表,不同的段可能都有(两种?三种?),但定义稍有差别,有10bytes,有12bytes;另一种情况是定义、说明其实是一样的,但在不同的地方,不同的属主。我不幸入坑,找错地方了,结果数据对不上。。。总之,要多看定义,写下来,写清楚,画图,精确,这样就没问题了。后面先上一个总图。
第二个小坑,loader是个描述section,并不包含真实可执行代码或数据,我看了loader以为就是被加载的。。。然后翻前翻后找为何有load text section,却没有load loader section的过程?
第三个小坑,section和segment是没关系的,甚至非aix(指power linux)操作系统可能都没有segment的概念。这个坑还没填平,我继续研究中。
用了差不多一星期,才对应上基本的section,relocation table,symbol file string和symbol file id,还差toc,symbol string,希望后面可以快一点。
_________________________________________
|_______________HEADER_DATA_____________|
| |
| File Header |
|.......................................|
| |
| Auxilliary Header Information |
|_______________________________________|
| ".text" section header |
|.......................................|
| ".pad" section header |
|.......................................|
| ".data" section header |
|.......................................|
| ".bss" section header |
|.......................................|
| ".loader" section header |
|.......................................|
| ".typchk" section header |
|.......................................|
| ".debug" section header |
|.......................................|
| ".except" section header |
|.......................................|
| ".info" section header |
|_______________________________________|
|______________RAW_DATA_________________|
| ".text" section data |
| (rounded to 4 bytes) |
|.......................................|
| ".pad" section data |
| (file alignment) |
|.......................................|
| ".data" section data |
| (rounded to 4 bytes) |
|.......................................|
| ".loader" section data |
|.......................................|
| ".typchk" section data |
|.......................................|
| ".debug" section data |
|.......................................|
| ".except" section data |
|.......................................|
| ".info" section data |
|_______________________________________|
|____________RELOCATION_DATA____________|
| |
| ".text" section relocation data |
| |
|.......................................|
| |
| ".data" section relocation data |
| |
|_______________________________________|
|__________LINE_NUMBER_DATA_____________|
| |
| ".text" section line numbers |
| |
|_______________________________________|
|________________SYMBOL_TABLE___________|
| |
| ".text", ".data" and ".bss" |
| section symbols |
| |
|_______________________________________|
|________________STRING_TABLE___________|
| |
| long symbol names |
|_______________________________________|
推荐阅读