OSなしでRAMから直接実行できるように、 Cプログラムを有効なELF形式(またはRAW形式)にコンパイルするにはどうすればよいですか? RAM の任意の場所にコードをロードし、そのアドレスで実行を開始できるブートローダーが存在すると仮定します。正確には、コンパイラ( GCC )フラグは何ですか? マップファイルは必要ですか?
サンプルの helloworld アプリケーションは大歓迎です :)
私の要点を詳しく説明するために
、main() メソッドを空の無限 while ループにして、OS固有または標準のライブラリ呼び出しが使用されないようにします。目的の o/p はハングです。通常のGCCオプションを使用すると、ブートローダーは実行可能ファイルのロードに確実に失敗し、無効なELF形式であることが通知されます。ただし、リンカーに-dNオプションを渡すと、有効なELFになります。クラッシュせずにハングアップさせるには、より多くのコンパイラ/リンカーオプションが必要です!! これらのコンパイラ オプションとは正確には何ですか?
file.c:
int main()
{
while(1);
}
コンパイル
gcc -c -nostdinc -fno-builtin
file.c ld -dN -nostdlib file.o
ブートローダーはa.outを RAM にロードして実行します。