What are these extra bytes in my binary file?

Viewed 661

I am in the process of writing a small operating system in C. I have written a bootloader and I'm now trying to get a simple C file (the "kernel") to compile with gcc:

int main(void) { return 0; }

I compile the file with the following command:

gcc kernel.c -o kernel.o -nostdlib -nostartfiles

I use the linker to create the final image using this command:

ld kernel.o -o kernel.bin -T linker.ld --oformat=binary

The contents of the linker.ld file are as follows:

SECTIONS
{
    . = 0x7e00;

    .text ALIGN (0x00) :
    {
        *(.text)
    }
}

(The bootloader loads the image at address 0x7e00.)

This seems to work quite well - ld produces a 128-byte file containing the following instructions in the first 11 bytes:

00000000 55                             push    ebp
00000001 48                             dec eax
00000002 89 E5                          mov ebp, esp
00000004 B8 00 00 00 00                 mov eax, 0x00000000
00000009 5D                             pop ebp
0000000A C3                             ret

However, I can't figure out what the other 117 bytes are for. Disassembling them seems to produce a bunch of garbage that doesn't make any sense. The existence of the additional bytes has me wondering if I'm doing something wrong.

Should I be concerned?

hexdump of the file

2 Answers
Related