http://www.muppetlabs.com/~breadbox/software/tiny/teensy.htmlとhttp://shaurz.wordpress.com/2008/06/02/finding-linux-gateso1-in-assemblyに感銘を受けました/、そして今、これらを使って何か実用的なことをしたいと思っています。
2 に答える
2
オペレーティング システム (Linux を想定) との通信を必要とする多くのことを行う必要があるため、システム コールを実行する必要があります。これらは通常、C ランタイム ライブラリによって実装されるため、すべてを再実装する必要があります。
少なくとも、次のシステムコールを実行する必要があると思います。
- ファイルをクエリして、そのサイズを知る
- 必要なメモリを割り当てます
- メモリをプロセスのアドレス空間にマップし、実行可能であることを確認します
- 指定されたファイルを新しく割り当てられたメモリにロードするようにカーネルに依頼します
次に、次のことを行うのは、おそらく多かれ少なかれ単純なアプリケーション レベルのコードです。
- ロードされたデータの ELF ヘッダーを調べて、エントリ ポイントを特定します。
- 静的データへの初期化子の適用
- 位置に依存しないコードを再配置して、マップされたスペースを適切に参照する
私はほぼ確実に多くのことを見逃しています。これは「魔法」ではありませんが、それでもかなりの重労働です。控えめに言っても、あなたの仕事はあなたのためにカットされます。楽しみ。
于 2013-09-10T09:49:12.440 に答える