次の3つのブートローダーの作成については、インターネット上にかなり多くの同一の情報があるようです。
- 無限ループ
jmp $
- 1文字を印刷する
- 「HelloWorld」を印刷します。
これは素晴らしいことであり、私はこれらの3つのバリエーションをほとんど問題なく実行しました。
32ビットまたは64ビットのコードをCで記述してコンパイルし、そのコードをブートローダーから呼び出します...基本的には、たとえば、単純な数値シミュレーションを実行するようにコンピューターを設定するブートローダーです。たとえば、素数をリストすることから始め、次に、フーリエ変換を計算するためのユーザーからの入力/出力をリストします。知らない。
これを行う方法についての情報は見つかりませんでしたが、始める前にすでにいくつかの問題を予見することができます。
まず、Cプログラムをコンパイルすると、ターゲットに応じて、いくつかの異なるファイルの1つにコンパイルされます。Windowsの場合、これはPEファイルです。Linuxの場合、これは.outファイルです。これらのファイルはどちらもまったく異なります。私の場合、ターゲットはWindowsやLinuxではなく、ブートローダーに書き込んだものです。
次に、実際のコードはどこにありますか?ブートローダーは正確に512バイトですが、私がCで書いたプログラムは、確かにもっと大きなものにコンパイルされます。それは私の(仮想)ハードディスク上に、おそらくある種のファイルシステム(私はまだ定義していません!)に置く必要があり、実行について考える前に、このファイルからメモリに情報をロードする必要がありますそれ。しかし、私の理解では、これはすべて、12行の「HelloWorld」ブートローダーよりもはるかに複雑です。
だから私の質問は:16ビットのブートローダーから大きな32ビットまたは64ビットのプログラム(C / C ++で書かれた)を呼び出すにはどうすればよいですか?