同じアドレス空間の異なるアドレスにロードする必要がある 2 つの実行可能ファイルがあるとします。2 つの実行可能ファイルを別々のファイルとして保持したいのですが、一方が他方から関数を呼び出せるようにします。
たとえば、0x1000 にロードする必要がある実行可能ファイル A にvoid foo()
0x1ABC の関数が含まれており、0x2000 にロードされている実行可能ファイル B が を呼び出すfoo()
場合、実行可能ファイル B のように終了する必要がcall 0x1ABC
あります。
これが必要な理由は、おもちゃの OS のためです。割り込みハンドラの場所とカーネル コードの開始場所を知るには、ブートローダーが必要です。すべてを 1 つのファイルにまとめることはできるかもしれませんが、そうはなりません。
現時点では、必要な関数を「適切な」アドレスに手動でロードし、それらへのジャンプを手動で書き込むことで問題を解決しています。それは機能しますが、言うまでもなく、最適ではありません。