16

ロードせずに.SO(共有オブジェクト)ファイルの内容を読み取る方法はありますか?

私のユースケースのシナリオは次のとおりです。

  1. Windows に .so ファイルがあります。.so に存在するかどうかに関係なく、いくつかのメソッドを照会する必要があります。
  2. .so ファイル内のすべてのクラスを知る。
  3. クラス名を指定すると、このクラスのすべてのメソッドを見つける必要があります。

注: これらのことは DLL で簡単に実行できます。また、Windowsで作業しているため、.SOファイルをロードできません。

ありがとう

4

3 に答える 3

21

スクリーニングするには:readelf -a <file>

出力を保存するには、ファイルにダンプします。たとえば、/usr/lib/python2.7/dist-packages/RPi に格納されている Raspberry Pi の Python RPi.GPIO モジュールについて学習しているので、次を実行します。 readelf -a GPIO.so > ~/gpio.so.out

于 2015-03-13T19:41:05.507 に答える
5

これらのファイルは、GNU binutils に含まれているツールで読み取ることができます。通常、GNU binutils は Linux システムにインストールされますが、これは Windows には当てはまりません。ただし、それらは Windows の Cygwin または minGW 内で実行されます。

資力:

  1. Binutils: http://www.gnu.org/software/binutils/
  2. Cygwin: http://www.cygwin.com/
  3. MinGW: http://www.mingw.org/
  4. MinGW Binutils: http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/

MinGW (3.) では、Cygwin (2.) は必要なく、Binutils (1.) を自分でコンパイルすることに注意してください。Binutils は MinGW (3.) に含まれていますが、MinGW (4.) の Binutils 部分だけをダウンロードすることもできます。

情報の使用方法nmreadelf取得方法については、次の記事で説明しています: How do I list the symbol in a .so file

この機能を C++ プログラムに組み込みたい場合は、これらのツールのソース コードを組み込むか (ライセンスに注意してください!)、プログラム内から呼び出すことができます。おそらく、Windows でソース コードをコンパイルするには、Cygwin 環境が必要になるでしょう。

于 2013-10-16T06:08:46.117 に答える