web-dev-qa-db-ja.com

ロードせずに.soファイルの内容を読み取る方法はありますか?

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

私の使用シナリオは次のとおりです。

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

注:DLLでこれらのことを簡単に行うことができます。また、私は.SOファイルをロードできないようにWindowsで作業しています。

ありがとう

11
Guruji

画面へ:readelf -a <file>

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

12
TCAllen07

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を使用して情報を取得する方法は、次のとおりです。 。soファイルにシンボルをリストする方法

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

5
ypnos

はい、Windows OS用のソリューションが必要でした。 Android sdk/ndkのndkツールにあるnm.exeツールを使用しました。

nm.exeの出力をいくつかのファイルにダンプし、正規表現を使用してそこからすべてのクラスとメソッドを抽出しました。

1
Guruji