Hallo,
habe seit ich graumer Zeit nicht mehr an meinem Kernel geschrieben habe wieder angefangen.
Ich habe vorher auf einem 32 Bit- Windows kompiliert und kompiliere nun unter einem 64-Bit Debian.
Auf jeden Fall hab ich meinen Kernel mit gcc kompiliert als elf32 (-m32) und im nasm mit -f elf32.
Das ganze dann gelinkt mit ld OUTPUT_FORMAT(elf32-i386) & OUTPUT_ARCH(i386:i386).
Ich bekomme dann aber beim booten unter VirtualBox von Grub immer gesagt:
Error 13: Invalid or unsupported executable format.
Hat jemand vielleicht eine Idee was ich falsch gemacht haben könnte?
Ich füge hier mal noch einen Objdump vom kernel und die Assemblerdatei für den Multiboot-Header und den spring in die init an.
Hoffentlich habt ihr ne Idee, woran es liegen könnte. Ich bin mit meinem Latein am Ende.
Gruß Sebi2020
; Written by Sebi2020
; Licensed under the GPL (General Public License)
; Project name: InfoOS
global loader
global load_selectors
MB_MAGIC equ 0x1badb002
MB_FLAGS equ 0x3
MB_CHECKSUM equ - (MB_MAGIC + MB_FLAGS)
section multiboot
; Multiboot Header
align 4 ; Durch 4 teilbare Adressen
dd MB_MAGIC
dd MB_FLAGS
dd MB_CHECKSUM
section .text
extern init ; Init ist extern (C-Code)
loader:
mov esp, 0x200000 ; Stack bei 2 MiB
push ebx ; Multiboot Struktur
call init ; Kernel initalisieren
kernel_end:
hlt ; Prozessor anhalten
jmp kernel_end
; Selektoren laden
load_selectors:
mov ax,0x10 ; Selektor 0x10 nach ax
mov ds,ax ; Datensegment updaten
mov es,ax ; Extra-Segement updaten
mov ss,ax ; Stack-Segment updaten
jmp 0x8:continue ; Selektor 0x8 nach CS laden und EIP erhöhen (far-jump)
continue:
ret ; Zu Init zurückkerhen (s. C-Code)
kernel: file format elf32-i386
Program Header:
LOAD off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**21
filesz 0x00102254 memsz 0x00122ac0 flags rwx
STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
filesz 0x00000000 memsz 0x00000000 flags rwx
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000200a 00100000 00100000 00100000 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .rodata 00000190 0010200c 0010200c 0010200c 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
2 .data 000000b4 001021a0 001021a0 001021a0 2**5
CONTENTS, ALLOC, LOAD, DATA
3 .bss 00020860 00102260 00102260 00102254 2**5
ALLOC
4 .comment 0000001c 00000000 00000000 00102254 2**0
CONTENTS, READONLY
Disassembly of section .text:
00100000 <loader-0x10>:
100000: 02 b0 ad 1b 03 00 add 0x31bad(%eax),%dh
100006: 00 00 add %al,(%eax)
100008: fb sti
100009: 4f dec %edi
10000a: 52 push %edx
10000b: e4 00 in $0x0,%al
10000d: 00 00 add %al,(%eax)
10000f: 00 bc 00 00 20 00 53 add %bh,0x53002000(%eax,%eax,1)
00100010 <loader>:
100010: bc 00 00 20 00 mov $0x200000,%esp
100015: 53 push %ebx
100016: e8 bb 00 00 00 call 1000d6 <init>
0010001b <kernel_end>:
10001b: f4 hlt
10001c: e9 fa ff ff ff jmp 10001b <kernel_end>
00100021 <load_selectors>:
100021: 66 b8 10 00 mov $0x10,%ax
100025: 8e d8 mov %eax,%ds
100027: 8e c0 mov %eax,%es
100029: 8e d0 mov %eax,%ss
10002b: ea 32 00 10 00 08 00 ljmp $0x8,$0x100032
00100032 <continue>:
100032: c3 ret
100033: 00 55 89 add %dl,-0x77(%ebp)