Hallo, ich suche vergeblich eine ausführliche Beschreibung zum Object file format (*.o) des avr-gcc (8-Bit). Freund Google findet nichts passendes. Kann jemand helfen? mira
Ist ein völliges Standard-ELF32, was erwartest du sonst noch? Es gibt irgendwo eine Kennung für die Zielarchitektur, nur darin unterscheidet sich AVR dann von anderen.
es wird in verschiedensten threads und auch beispielsweise hier: http://www.rn-wissen.de/index.php/Avr-gcc/Interna immer von einem "speziellen elf32-avr-format" gesprochen. Wenn ich nachfrage wird dies bestätigt, in verbindung mit der Information, dass es gerade kein standard-elf32 wäre. Ich habe hier von keiner Seite bisher eine wirklich eindeutige Antwort erhalten, daher die Frage.
Dann glaub' mir: es ist ein stinknormalens Standard-ELF32. Unter Linux unterscheidet es sich wohl nur in einem einzigen Byte vom native ELF32, sodass man statt der avr-Tools (avr-nm, avr-objcopy etc.) auch genausogut die Tools des Systems nehmen kann.
p.s.: FreeBSD hat zwar noch ein von Linux unterschiedliches OS-Feld, aber elfdump geht auch hier ganz normal. Hier der Anfang:
1 | elf header: |
2 | |
3 | e_ident: ELFCLASS32 ELFDATA2LSB ELFOSABI_SYSV |
4 | e_type: ET_REL |
5 | e_machine: (unknown machine) -- type 0x53 |
6 | e_version: EV_CURRENT |
7 | e_entry: 0 |
8 | e_phoff: 0 |
9 | e_shoff: 7776 |
10 | e_flags: 179 |
11 | e_ehsize: 52 |
12 | e_phentsize: 0 |
13 | e_phnum: 0 |
14 | e_shentsize: 40 |
15 | e_shnum: 11 |
16 | e_shstrndx: 8 |
17 | |
18 | program header: |
19 | |
20 | section header: |
21 | |
22 | entry: 0 |
23 | sh_name: |
24 | sh_type: SHT_NULL |
25 | sh_flags: |
26 | sh_addr: 0 |
27 | sh_offset: 0 |
28 | sh_size: 0 |
29 | sh_link: 0 |
30 | sh_info: 0 |
31 | sh_addralign: 0 |
32 | sh_entsize: 0 |
33 | |
34 | entry: 1 |
35 | sh_name: .text |
36 | sh_type: SHT_PROGBITS |
37 | sh_flags: SHF_ALLOC|SHF_EXECINSTR |
38 | sh_addr: 0 |
39 | sh_offset: 52 |
40 | sh_size: 330 |
41 | sh_link: 0 |
42 | sh_info: 0 |
43 | sh_addralign: 1 |
44 | sh_entsize: 0 |
45 | |
46 | ... |
Das Feld e_machine ist das wesentliche Unterscheidungsmerkmal für den AVR. Ein FreeBSD native ELF32 sieht im Vergleich so aus:
1 | elf header: |
2 | |
3 | e_ident: ELFCLASS32 ELFDATA2LSB ELFOSABI_FREEBSD |
4 | e_type: ET_REL |
5 | e_machine: EM_386 |
6 | e_version: EV_CURRENT |
7 | e_entry: 0 |
8 | e_phoff: 0 |
9 | e_shoff: 144 |
10 | e_flags: 0 |
11 | e_ehsize: 52 |
12 | e_phentsize: 0 |
13 | e_phnum: 0 |
14 | e_shentsize: 40 |
15 | e_shnum: 8 |
16 | e_shstrndx: 5 |
Danke Jörg, jetzt glaube ich das. Falls jemand Details nachlesen will, habe ich das PDF dazu als Anhang hinzugefügt. mira
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.