残念ながら、ソースコードを紛失し、Linuxのgccで作成された出力ファイルがあり、PCにアクセスできません。出力ファイルをソースファイルに変換する方法はありますか(LinuxのCでは)?
残念ながら、ソースコードを紛失し、Linuxのgccで作成された出力ファイルがあり、PCにアクセスできません。出力ファイルをソースファイルに変換する方法はありますか(LinuxのCでは)?
回答:
牛を飼っていたが、うっかりそれをハンバーガーに変えてしまい、牛を元に戻したいと思った。
申し訳ありませんが、この方法では機能しません。
バックアップからソースファイルを復元するだけです。
ああ、バックアップがありませんでした。残念ながら、宇宙はあなたにそのための休憩を与えません。
バイナリを逆コンパイルできます。それはあなたのソースコードを与えることはありませんが、それはあなたにあげるいくつかの同じ動作をするソースコードを。デバッグバイナリでない限り、変数名は取得できません。最適化なしでコンパイルしない限り、まったく同じロジックは得られません。当然、コメントは得られません。
Boomerangを使用して一部のプログラムを逆コンパイルしましたが、その結果はマシンコードよりも読みやすくなりました。それが最高のツールかどうかはわかりません。とにかく、奇跡を期待しないでください。
実行可能ファイルのリバースエンジニアリングでは、いくつかのツールが一般的です。
私が見たほとんどの場合、コードは最初から書き直すか、アセンブリ言語プログラムとして維持するか、古いバージョンに変更要求を再適用することによって再構築する必要がありました。
やりたいことを「逆コンパイル」といいます。そこには多くの逆コンパイラがあり、それらすべてをここでカバーすることは現実的ではありません。
ただし、一般的な注釈として、Cソースから実行可能マシンコードへの変換は不可逆です。例えば:
コードが記述どおりにコンパイルされることはまれです。最近のほとんどのコンパイラーは、コードを大幅に変更して最適化します。したがって、逆コンパイルすると、コンパイラーはソースコードがどのように見えるはずであるかを推測できるだけであり、コードがなくなったことを知る方法はありません。デコンパイラーが優れている場合、取得したコードは少なくとも同等の実行可能ファイルにコンパイル可能であり、読み取り可能になるようにゆっくりとリファクタリングを開始できます。しかし、おそらくデコンパイラーは絶対に読めないスパゲッティコードを生成し、それを解読することは大きな頭痛の種になるでしょう。場合によっては、プログラムを最初から書き直すだけで済むこともあります。