[英]Bochs (2.4.6)/GRUB (0.97) “Error 13 Invalid or unsupported executable format” when passing char string in C function call
[英]GRUB error 13: invalid or unsupported executable format on custom kernel
我正在嘗試學習 OS Dev,並開始根據The Little book about OS Development構建自己的 kernel 。
當我使用 bochs 加載 kernel 時,GRUB 抱怨:
error 13: invalid or unsupported executable format
我正在使用的文件:
global loader
MAGIC_NUMBER equ 0xBADB002
FLAGS equ 0x0
CHECKSUM equ -MAGIC_NUMBER
section .text
align 4
dd MAGIC_NUMBER
dd FLAGS
dd CHECKSUM
loader:
mov eax, 0xCAFEBABE
.loop:
jmp .loop
ENTRY(loader)
SECTIONS
{
. = 0x00100000;
.text ALIGN (0x1000) :
{
*(.text)
}
.rodata ALIGN (0x1000) :
{
*(.rodata*)
}
.data ALIGN (0x1000) :
{
*(.data)
}
.bss ALIGN (0x1000) :
{
*(COMMON)
*(.bss)
}
}
megs: 32
display_library: sdl
romimage: file=/usr/share/bochs/BIOS-bochs-latest
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest
ata0-master: type=cdrom, path=os.iso, status=inserted
boot: cdrom
log: bochslog.txt
clock: sync=realtime, time0=local
cpu: count=1, ips=1000000
default=0
timeout=0
title First OS
kernel /boot/kernel.elf
要執行的命令:
nasm -f elf32 loader.s
ld -T link.ld -melf_i386 loader.o -o kernel.elf
genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -A os -input-charset utf8 -quiet -boot-info-table -o os.iso iso
bochs -f bochsrc.txt
我的文件結構是這樣的:
os_dev
|--(rest of the files)
|--iso
|-- boot
|-- kernel.elf
|-- grub
|-- menu.lst
|-- stage2_eltorito
文件 stage2_eltorito 是從https://github.com/littleosbook/littleosbook/blob/master/files/stage2_eltorito下載的
Michael Petch 注意到 B. Kostas 為 Grub Legacy 使用了不正確的幻數。
將MAGIC_NUMBER equ 0xBADB002
loader.s
為MAGIC_NUMBER equ 0x1BADB002
解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.