Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Ralph Hofer Geändert vor über 7 Jahren
1
Executable and Linkage Format (ELF)
2
Was ist ELF ● ELF ist das Standardformat für Binaries, Objektdateien und Shared Libraries unter den meisten *nixioden Systemen ● ELF ist sowohl das Executable als auch das Linkerformat ● ELF ist ein offener Standard, der architektur- und plattformunabhängig ist.
3
Wieso brauchen wir ELF? ● Das Betriebssystem muss wissen, wie es das Programmabbild von der Festplatte in den Speicher transferiert. ● Der Linker muss aus mehreren Objektdateien eine Executable oder eine Shared Library fertigen. ● Es wird ein einheitlicher Mechanismus für das dynamische Laden von Modulen gebraucht
4
Wie schaut das ELF Format aus? ● ELF-Header ● Section-Header (bei Objektdateien und.so Pflicht) ● Programm-Header (Exec Pflicht) ● Sections (bei Objektdateien und.so Pflicht) ● Segments (bei und Exec Pflicht) ● Memoryimage bzw. Symbole
5
ELF-Header #define EI_NIDENT 16 typedef struct { e_ident[EI_NIDENT]; unsigned char e_type; Elf32_Half e_machine; Elf32_Half e_version; Elf32_Word e_entry; Elf32_Addr e_phoff; Elf32_Off e_shoff; Elf32_Off e_flags; Elf32_Word e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; Elf32_Half } Elf32_Ehdr;
6
e_ident entschlüsselt (1) ● e_ident identifiziert die ELF-Datei als ELF-Datei ● 0x7F, 'E', 'L', 'F' sind die ersten 4Bytes von e_ident und identifizieren die Datei als ELF Datei ● Das 5. Byte gibt an, ob die ELF Datei eine 32 oder 64 Bit Datei ist. ● Byte 6 gibt an, ob die Architektur LSB oder MSB ist. ● Byte 7 gibt die ELF Version an, momentan 1
7
e_ident entschlüsselt (2) ● Byte 8 gibt das Betriebssystem an ● Byte 9 gibt an, welche ABI vorausgesetzt wird. ● Byte 10 bis 16 sind unbenutzt, aber für den weiteren Ausbau von ELF reserviert
8
Der Rest entschlüsselt (1) ● e_type gibt die Art der Datei an (Executable, Shared Library oder Objektdatei). ● e_machine gibt an, für welchen Prozessor die Datei geschrieben wurde. ● e_version ist nochmals die ELF-Version ● e_entry enthält die virtuelle Adresse des Programanfangs. ● e_phoff gibt die Position des Programmheaders innerhalb der Datei an
9
Der Rest entschlüsselt (2) ● e_shoff gibt die Position des Sectionheaders innerhalb der Datei an ● e_flags enthällt prozessorspezifische Flags ● e_ehsize ist die Größe des Headers in Bytes
10
Program Header typedef struct { Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; } Elf32_Phdr;
11
Programheader entschlüsselt ● p_type gibt an, was für eine art Segment wir haben ● p_offset gibt an, wo der Programheader in file anfängt ● p_vaddr gibt an, an welcher virtuellen Adresse das Segment geladen werden soll ● p_paddr gibt an, wenn nötig, an welcher Physikalischen Adresse geladen werden soll
12
Programheader entschlüsselt (2) ● p_filesz gibt an, wie groß das Segment in der Datei ist ● p_memsz gibt an, wie groß das Segment im Speicher sein soll ● p_flags sind Optionen für das Segment. Bsp. Ob das Segment readonly ist. ● p_align gibt an, wie das Segment in der Datei im Speicher ausgerichtet ist bzw. werden soll
13
Quellen (Der Anti-Guttenberg) ● http://refspecs.freestandards.org/elf/elf.pdf http://refspecs.freestandards.org/elf/elf.pdf ● http://www.muppetlabs.com/~breadbox/softwar e/tiny/teensy.html http://www.muppetlabs.com/~breadbox/softwar e/tiny/teensy.html ● http://www.linux-kernel.de/appendix/ap05.pdf
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.