ELF文件执行过程
ELF文件有操作系统的加载器loader执行,比如linux,windows,对于3803处理器是grmon的load命令。
加载器会读取ELF文件program header,比如:
Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000074 0x08000000 0x08000000 0x00050 0x00050 R E 0x4 LOAD 0x0000c4 0x70000000 0x70000000 0x00004 0x00008 RW 0x4 Section to Segment mapping: Segment Sections... 00 .text 01 .data .bss
上面的程序头有两个项目,也就是两个段segment,第一个段存放text节,第二个段存放data和bss。
第一个段的虚拟地址,即rom地址(是吗?)是0800 0000,在文件中偏移为0x74,文件大小和mem大小均为0x50.
第二个段的虚拟地址,即ram地址(是吗?)是7000 0000,在文件中偏移为0xc4,文件大小为4,mem大小为8(其中4字节bss).
加载器读取程序头,根据程序头的信息,将相应内容写到对应存储器上(text会放在rom里吗?),然而,执行入口点处的指令。