-2

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.htmlhttp://shaurz.wordpress.com/2008/06/02/finding-linux-gateso1-in-assemblyに感銘を受けました/、そして今、これらを使って何か実用的なことをしたいと思っています。

4

2 に答える 2

2

オペレーティング システム (Linux を想定) との通信を必要とする多くのことを行う必要があるため、システム コールを実行する必要があります。これらは通常、C ランタイム ライブラリによって実装されるため、すべてを再実装する必要があります。

少なくとも、次のシステムコールを実行する必要があると思います。

  1. ファイルをクエリして、そのサイズを知る
  2. 必要なメモリを割り当てます
  3. メモリをプロセスのアドレス空間にマップし、実行可能であることを確認します
  4. 指定されたファイルを新しく割り当てられたメモリにロードするようにカーネルに依頼します

次に、次のことを行うのは、おそらく多かれ少なかれ単純なアプリケーション レベルのコードです。

  1. ロードされたデータの ELF ヘッダーを調べて、エントリ ポイントを特定します。
  2. 静的データへの初期化子の適用
  3. 位置に依存しないコードを再配置して、マップされたスペースを適切に参照する

私はほぼ確実に多くのことを見逃しています。これは「魔法」ではありませんが、それでもかなりの重労働です。控えめに言っても、あなたの仕事はあなたのためにカットされます。楽しみ。

于 2013-09-10T09:49:12.440 に答える