5

バイトコードを実行するためのコンパイラと仮想マシンを構築しています。この言語では、一部の外部共有オブジェクトで定義される可能性のある外部 C 関数と、メイン コンパイラ/VM バイナリ (いくつかの重要な言語組み込み) をバインドできます。

stripメインの実行可能ファイル内のシンボルを dlopen(NULL, ...) で動的にバインドできることはわかっていますが、バイナリで実行した後ではできません。そこで次の質問があります。

  1. ストリップされたバイナリでこれを行う方法はありますか?
  2. 一般に、この機能は UNIX システム間でどの程度移植可能ですか?
  3. どういうわけかWindowsで同じトリックを行うことは可能ですか?
  4. メインの実行可能ファイル内で動的にバインドする代替方法はありますか?
4

1 に答える 1

6
  1. 代わりに使用strip -dして、デバッグ シンボルのみを取り除きます。

  2. dlopen(3)マニュアルページには次のように書かれています:

    CONFORMING TO
           POSIX.1-2001 describes dlclose(), dlerror(), dlopen(), and dlsym().
    

    したがって、* nix 間で非常に移植性があります。

  3. Windows ではLoadLibrary()GetProcAddress()代わりに and が使用されます。

  4. いいえ。

于 2010-11-15T11:51:49.217 に答える