ELF ####### overview ========== `ARM ELF File Format `_ elf含3类object file: relocatable, executable, shared object elf基本结构: - linking view: elf header, program header table(optional), section 1 ... n, section header table - execution view: elf header, program header table, segment 1 ... n, section header table(optional) 系统预留部分特殊的section (reserved names),例如.symtab, .strtab。linker/debuger场景,通过section header table访问这些section. loader场景,通过program header table访问segment,执行程序。 generic elf file layout ========================== elf format: - elf header - { program header table, text segment (code), data segment (initialized r-w data), bss segment (uninitialized data, 在image初始化/程序启动时置0 } - { ".symtab" section (用于底层debug), ".strtab" section (用于symbol table的entry的textual names), ".shstrtab" section(所有section的textual names), debug sections (源码相关的debug信息, arm symbolic debugger, dwarf), section header table } 注意:executable 可以不含section相关的内容,只含program segment相关的内容 scatter-loaded executables ============================== arm linker 从一个 load region 生成 section header table section name与load region name相同 如果load region含code/data/uninitialized data,那么会相应生成多个同名section,只是内容不同。 不同section的地址信息在section header table里记录。 note ======== 可见,scatter-loaded 如果载入恶意内容,就。。。