3

このアセンブリ ファイルを GNU as でアセンブルし、リンカー スクリプトを使用して GNU ld とリンクします。

リンカー スクリプト ( boot.ld):

INPUT(boot.o)
OUTPUT(boot.out)
ENTRY(boot_start)

SECTIONS {
        . = 0x7c00;
        .text : { *(.text) }
        .data : { *(.data) }
        . = 0x7dfe;
        .boot_end : { *(.boot_end) }
}

ご覧のとおり、ブートローダーに必要なファイルを正確に 512 バイトにしようとしています. = 0x7cdfe.boot_endブート署名が含まれているため、残りの 2 バイトがいっぱいになります。

次のようにブートローダーを作成します。

m4 boot.S | as -o boot.o
ld -T boot.ld
objcopy -O binary boot.out boot.img

boot.outすでに絶対アドレスを持つセクションが含まれており、すべて問題ないようです。.boot_end0x7dfeあり、穴がゼロで埋められることを期待していますが、いいえ、boot.img合計で 55 バイトです。私にとって奇妙なことは、ファイルにブート署名さえ含まれていないことです。スキップされたバイトが.textない.dataだけです。.boot_end

これらのバイトをスキップするように ld を移動するにはどうすればよいですか? そして、私のブート署名はどこに消えたのですか?

4

1 に答える 1