2011-11-10 6 views
1

私は比較的CやC++プログラミングに慣れていませんが、共有ライブラリからシンボルをロードして呼び出すことができれば(バイナリのようにコンパイルしてリンクしていると理解しています)、実行時に別の[実行可能な]バイナリからシンボルをロードしますか?他のバイナリからシンボルをロードする

私はLinuxでGCCを使ってこれを行うことに特に関心があります。

答えて

1

理論的には、バイナリからオブジェクトを取り出し、それに対して(静的または動的に)リンクすることができますが、バイナリ構造を調べる必要があります。現代のLinuxシステムはすべてELFバイナリを使用しているので、これは簡単に実行できます。 wikipedia articleから始め、そこから行くことを提案してください。

+0

これは私にとって素晴らしいスタートです。ありがとうございます! – andyortlieb

2

あなたは、UNIXなどに

を呼び出したい関数のアドレスを取得するには、現在のプロセス

  • GetProcAddressに共有ライブラリをロードするには、Windows

    1. LoadLibraryにプログラミングされている場合Oses。 のdlopendlsymを何か

      An example of dlsym 6.6を探します。ファイルdemo_dynamic.c

  • +1

    制限:バイナリは、動的にリンク可能な共有オブジェクトとしてコンパイルする必要があります。ダイナミックリンカは、スタンドアロンの実行可能なリンクではなく、ライブラリのリンク時にのみ配置されるライブラリ名のsonameとバージョンを必要とします。 – moshbear

    +1

    OPが明確に**共有ライブラリ** –

    +2

    "共有ライブラリからシンボルをロードして呼び出すことができれば(バイナリのようにコンパイルされ、リンクされていると理解しています)、**別のバイナリからシンボルを読み込むことも可能です実行時に** ** " – moshbear

    関連する問題