web-dev-qa-db-ja.com

.soファイルからCソースコードを抽出する方法

私は以前に開発したソフトウェアに取り組んでおり、ソースコードはLinux共有ライブラリ(.so)としてコンパイルされており、ソースコードは存在しません。 Linux共有ライブラリからソースコードを抽出できるツールはありますか?

ありがとう、ラビ

17
Ravi

ありません。コードをコンパイルすると、その痕跡はバイナリに残りません。マシンコードのみです。

逆コンパイラについて言及している人もいますが、それらはソースを抽出せず、実行可能ファイルを分析して、元のソースと同じ効果を持つソースを生成します。

16
cnicutar

オブジェクトコードを逆アセンブルして、マシンコードのニーモニックを取得できます。

objdump -D --disassembler-options intel sjt.o Intel構文アセンブリを取得する

objdump -D --disassembler-options att sjt.oまたはobjdump -D sjt.o AT&T構文アセンブリを取得する

しかし、元のソースコードは見つかりませんでした。セクションを調べて再構成することにより、プロセスを逆にしようとする場合があります。それは彼に地獄の痛みを与えるでしょう。

2
phoxis

免責事項:私はHex-Rays SAで働いています。

Hex-Raysデコンパイラーは、real-lifex86およびARM =コード。元のソースが得られないのは事実ですが、それと同等のものが得られます。バイナリを削除しなかった場合は、関数名を取得したり、運がよければ型を取得したりすることもできます。およびローカル変数。ただし、シンボル情報がなくても、最初のラウンドの逆コンパイルに固執する必要はありません。Hex-Raysデコンパイラーはinteractive-変数や関数の名前を変更したり、変数のタイプを変更したり、元のコードの構造を表す構造タイプを作成したり、コメントを追加したりできます。少しの作業で、たくさん回復できますそして、必要なのは元のファイル全体ではなく、いくつかの重要なアルゴリズムまたは関数です-そしてこのHex-Raysは通常あなたに提供できます。

demovideos および comparisonpages をご覧ください。それでも「アセンブリを見つめる」と同じことだと思いますか?

2
Igor Skochinsky

いいえ。通常、これは不可能です。ソースはコンパイルされたオブジェクトまたはライブラリにパッケージ化されていません。

0
Stephen Canon