windows平台下用elf作为目标文件格式
------22:46 2008-10-8 ljhhh0123-
近来发现一个Tiny C Compiler,一个ANSI C编译器,
支持linux和windows平台,
短小精悍,支持部分GNUC扩展,包括嵌入AT&T汇编等,在偶然间发现
它生成的目标文件格式竟是elf(Relocatable),
windows下最后生成PE可执行文件,真是令人吃惊,先学习之.
我所不解之处就是符号elf32_sym.st_shndx取小于0值的含义,
还有那个叫.rel.text节的意思。
请高手赐教.谢谢.
附件为:test.zip.jpg 请去掉.jpg扩展名.
方法是:把test.o文件倾印下来边看资料边细分,并做注释.
工具:记事本+winhex+IDA+若干elf文件格式学习资料(包括elf_format.pdf)+其它
软件:Tiny C Compiler version 0.9.24 for windows
auther: Fabrice Bellard
下载地址:http://dl3.csdn.net/fd.php?i=39526513006544&
官网:http://bellard.org/tcc/
学习文件格式,就读二进制!
----开始----
7F454C46 01 01 01 000000000000000000 "/177ELF" 32位 little-endlian 版本1
0100 文件类型为可重定位文件
0300 i386
01000000 当前版本
00000000 入口的虚拟地址
00000000 程序头部表格的偏移量(没有即为0)
44020000 节区头部表格的偏移量
00000000 保存与文件相关的,特定于处理器标志
3400 elf头部大小(以字节计算)
0000 程序头部表格的表项大小
0000 程序头部表格的表项数目
2800 节区头部表格的表项大小
0800 节区头部表格的表项数目
0700 节区头部表格中与节区名称表相关的表项的索引
如果没有节区名称表,可为0.
--空隙(第0个节区)--
000000000000000000000000
----第一个节区0x8d字节--并按0x20字节对齐--
5589E581EC10000000908B4510C1E802
8945F056578B4DF08B45108B7D088B75
0CF3A5A8020F84FCFFFFFF66A5A8010F
84FCFFFFFFA4894DFC897DF88975F45F
5E8B4508E900000000C9C3 到此为my_memcpy函数的机器码,大小为0x4b
5589E581EC
0000000090B80000000050E8FCFFFFFF
83C404B81400000050B80000000050B8
0000000050E8FCFFFFFF83C4