Linux 用の非常に単純なプロセス ローダーを作成しています。ロードしている実行可能ファイルは既にコンパイルされており、それぞれがメモリ内のどこにあると予想されるかを知っています。私が試した最初のアプローチは、次mmap()
のように、各コードまたはデータ セクションを正しい場所に手動で配置することでした。
mmap(addr, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0)
MAP_FIXED フラグを削除しない限り、セグメンテーション違反が発生します。これは、1 つのブロックのアドレスが既にメモリ内にある何か、おそらくローダー自体と競合しているように思われるためです。アドレス0x401000
が問題のようです。
私はこれをどこから始めるべきかさえよくわかりません。友人は、メモリアクセス操作を仮想化することを提案しました。そのためにどのようなパフォーマンス ヒットが発生するかはわかりません。また、それがどのように行われるかもわかりませんが、オプションになる可能性があります。私が本当にやりたいのは、「空の」プロセスを作成することです。これは、それに関する限り、メモリを完全に実行するため、必要になるまでユーザー空間には何もロードされません。「空の」プロセスの概念全体は無意味かもしれませんが、それは私が望むものを説明する最良の方法です. 私は、私を助けるかもしれないいくつかの参照や例を切望しています。