ELF头存在于可执行映像中

时间:2016-07-17 17:15:05

标签: assembly linker elf

我正在尝试编写64位内核。 但是,我在组装和链接的elf文件中发现了一些奇怪的东西。 这是内核的存根。

stub.asm

[bits 64]

KERNEL_STACK_SIZE equ 65536 ; 64 KiB stack

;Reserve space for stack
section .bss
    global kernel_stack
kernel_stack:
    resb KERNEL_STACK_SIZE

section .text
    global kernel_start
kernel_start:
kernel_end:
    cli
    hlt
    jmp kernel_end

这是我与x86_64-elf-ld(gcc交叉编译器)一起使用的链接描述文件。

ENTRY(kernel_start);

SECTIONS
{
    . = 0x300000;

    .text : ALIGN(0x1000)
    {
        *(.text);
    }
    .data : ALIGN(0x1000)
    {
        *(.data);
    }
    .rodata : ALIGN(0x1000)
    {
        *(.rodata*);
    }
    .bss : ALIGN(0x1000)
    {
        *(COMMON);
        *(.bss);
    }
}

链接描述文件有效但生成的elf大小超过1 MiB(确切地说是1049280字节)。 入口点有效且在0x300000,但它出现在文件的偏移量0x100000处,并且elf程序头告诉从文件的开头(包括所有标题)加载到0x200000的.text部分的末尾

链接描述文件有问题吗?

0 个答案:

没有答案