3

次の3つのブートローダーの作成については、インターネット上にかなり多くの同一の情報があるようです。

  1. 無限ループjmp $
  2. 1文字を印刷する
  3. 「HelloWorld」を印刷します。

これは素晴らしいことであり、私はこれらの3つのバリエーションをほとんど問題なく実行しました。

32ビットまたは64ビットのコードをCで記述してコンパイルし、そのコードをブートローダーから呼び出します...基本的には、たとえば、単純な数値シミュレーションを実行するようにコンピューターを設定するブートローダーです。たとえば、素数をリストすることから始め、次に、フーリエ変換を計算するためのユーザーからの入力/出力をリストします。知らない。

これを行う方法についての情報は見つかりませんでしたが、始める前にすでにいくつかの問題を予見することができます。

まず、Cプログラムをコンパイルすると、ターゲットに応じて、いくつかの異なるファイルの1つにコンパイルされます。Windowsの場合、これはPEファイルです。Linuxの場合、これは.outファイルです。これらのファイルはどちらもまったく異なります。私の場合、ターゲットはWindowsやLinuxではなく、ブートローダーに書き込んだものです。

次に、実際のコードはどこにありますか?ブートローダーは正確に512バイトですが、私がCで書いたプログラムは、確かにもっと大きなものにコンパイルされます。それは私の(仮想)ハードディスク上に、おそらくある種のファイルシステム(私はまだ定義していません!)に置く必要があり、実行について考える前に、このファイルからメモリに情報をロードする必要がありますそれ。しかし、私の理解では、これはすべて、12行の「HelloWorld」ブートローダーよりもはるかに複雑です。

だから私の質問は:16ビットのブートローダーから大きな32ビットまたは64ビットのプログラム(C / C ++で書かれた)を呼び出すにはどうすればよいですか?

4

1 に答える 1

4

これは大きなトピックです。

おそらく、保護モードに入り、知ることから始める必要があります。

于 2012-10-29T04:58:43.033 に答える