私はCで小さなオペレーティングシステムを書いているところです。ブートローダーを書いたので、コンパイルする単純なCファイル(「カーネル」)を取得しようとしていますgcc
:
int main(void) { return 0; }
次のコマンドでファイルをコンパイルします。
gcc kernel.c -o kernel.o -nostdlib -nostartfiles
リンカーを使用して、次のコマンドを使用して最終的なイメージを作成します。
ld kernel.o -o kernel.bin -T linker.ld --oformat=binary
ファイルの内容は次のlinker.ld
とおりです。
セクション { . = 0x7e00; .text ALIGN (0x00) : { *(。文章) } }
(ブートローダはアドレスでイメージをロードします0x7e00
。)
これは非常にうまく機能しているようld
です。最初の 11 バイトに次の命令を含む 128 バイトのファイルが生成されます。
00000000 55プッシュebp 00000001 10月48日 00000002 89 E5 mov ebp, esp 00000004 B8 00 00 00 00 mov eax, 0x00000000 00000009 5D ポップ ebp 0000000A C3 ret
しかし、残りの 117 バイトが何のためにあるのかわかりません。それらを分解すると、意味のない大量のゴミが生成されるようです。追加のバイトの存在は、私が何か間違ったことをしているのだろうかと思っています。
私は心配する必要がありますか?