Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Executable and Linkage Format (ELF). Was ist ELF ● ELF ist das Standardformat für Binaries, Objektdateien und Shared Libraries unter den meisten *nixioden.

Ähnliche Präsentationen


Präsentation zum Thema: "Executable and Linkage Format (ELF). Was ist ELF ● ELF ist das Standardformat für Binaries, Objektdateien und Shared Libraries unter den meisten *nixioden."—  Präsentation transkript:

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) ● ● e/tiny/teensy.html e/tiny/teensy.html ●


Herunterladen ppt "Executable and Linkage Format (ELF). Was ist ELF ● ELF ist das Standardformat für Binaries, Objektdateien und Shared Libraries unter den meisten *nixioden."

Ähnliche Präsentationen


Google-Anzeigen