Ok danke.
Also, ich erstelle meine ELF-Datei so:
as -o test.o test.asm
ld test.o -melf_i386 -o test.elf
Die test.asm hat folgenden Inhalt:
.intel_syntax noprefix
.global _start
_start:
x:
int 0x30
jmp x
Laut meinem Kernel hat das Programm dann 1 Program-Header-Entry und 5 Section-Header-Entries, aber das PH-Segment ist angeblich kein PT_Load-Segment. Als e_entry hab ich dann 0x8048054.
Ich glaube irgendwie, dass ich noch irgendeinen kleinen dummen Fehler in meinem ELF-Code habe. Mein ELF-Code liegt hier:
http://darkinsanity.netne.net/nerdpole/source/ELF.biDer Code ist noch nicht ganz fertig, z.B. mappt er im Moment einfach die Segmente in den Speicher, anstatt sie zu kopieren.
Ich hab schon probiert an die "type"s ein "FIELD=1" anzuhängen (was gleichbedeutend mit einem "__attribute__ ((packed))" ist), und ich hab das schon weggelassen, aber es hilft alles nichts.
"objdump -x test.elf" gibt aus:
test.elf: file format elf32-i386
test.elf
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048054
Program Header:
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x00000058 memsz 0x00000058 flags r-x
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000004 08048054 08048054 00000054 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
SYMBOL TABLE:
08048054 l d .text 00000000 .text
08048054 l .text 00000000 x
08048054 g .text 00000000 _start
08049058 g *ABS* 00000000 __bss_start
08049058 g *ABS* 00000000 _edata
08049058 g *ABS* 00000000 _end
Anscheinend hat das Program doch ein PT_Load-Segment. Aber wieso behauptet mein Code das Gegenteil?
Mein Code sagt ja auch das vaddr 0 wäre. Das stimmt ja auch nicht. Ich bin echt ratlos...