C ++逆コンパイラはありますか?[閉まっている]


116

C ++ソースコードを失ったプログラムがあります。そこに良いC ++逆コンパイラがありますか?

私はすでにブーメランに遭遇しました。


objdumpLinuxの場合
Stypox

1
cutter.re偉大なGUIと優れた組み込みの逆コンパイラのために
Misiur

回答:


80

あなたは使用することができますプロIDAによって六角線を。通常、デバッグ情報をコンパイルしない限り、バイナリから適切なC ++を取得できません。コードを逆にする多くの手作業を費やす準備をします。

バイナリを削除しなかった場合、IDA ProでCに似たコードを生成して作業できるため、いくつかの希望があります。しかし、少なくとも私が数年前にそれを使用したときは、通常は非常にラフです。


26
明確にするために、IDAは分解のみを行います。Hex-Raysと呼ばれるアドオンがあり、可能な範囲で残りの部分をC / C ++ソースに逆コンパイルします。
davenpcj

2
私のドキュメントを読むと、hex-raysはCのような擬似コードのみを出力します。C ++の逆コンパイルには役に立たないというわけではありません。コンパイラがC ++構造を変換する方法について少し知っておく必要があります。
マイケルアンダーソン

さらに明確にするために、逆アセンブリはHex-Raysで逆コンパイルできる最も多く、ASMをC ++に変換しますASMはすべてのプログラムでASMとして実行できるため、あらゆるプログラミング言語に変換できます
Barkermn01

4
SNOWMANは優れた無料のc ++デコンパイラーです
インガ

2
雪だるまの+1ですが、他の人が述べたように、単純なHello、Worldでさえ、逆コンパイルすると実質的に読めなくなります。
bdetweiler 2018

25

情報はコンパイルプロセスで破棄されます。デコンパイラーがクラスとすべてを備えた論理的に同等のコードを生成できたとしても(おそらく不可能です)、自己文書化の部分は最適化されたリリースコードではなくなっています。変数名、ルーチン名、クラス名はなく、アドレスのみです。


24
プログラムの「魂」はなくなった、その元の自分の空の殻だけ...」
Darshan Chaudhary 2017

21

はい、しかしどれも、努力に見合うだけの十分に読みやすいコードを生成することはできません。古いアプリを一から書き直すよりも、アセンブラーブロックが含まれている逆コンパイルされたソースを読み取るのに多くの時間を費やします。


6

C ++コードを生成する逆コンパイラは見たことがありません。Cコードの生成を合理的に試みるいくつかの実験的なものを見てきましたが、それらは特定のコンパイラのコード生成パターンのマッチングに依存する傾向がありました(変更された可能性があるため、これを最後に調べてからしばらく時間が経っています)。もちろん、シンボリック情報は失われます。「逆コンパイラ」のグーグル。


4

元のコードがどれほど大きく、どれだけ適切に記述されているかに応じて、お気に入りの言語(まだC ++である可能性があります)からもう一度やり直して、前のバージョンでの間違いから学ぶ価値があるかもしれません。誰かが一度、捨てるためにそれを書くことについて言ったことはありませんか?

nb明らかにこれが巨大な製品である場合、それは時間の価値がないかもしれません。



24
ジョエルは素晴らしいコラムニストですが、時々間違っています。そして、彼が間違って引用されている場合があります。このように、問題はソースコードの損失を中心に扱っているためです。Joelsの記事では、ソースコードが重要である理由を説明しています。
MSalters 2008年

5
誰かが、捨てるためにそれを書くことについて一度言ったことはありませんか?ええ、そして彼は考えを変えましたdavewsmith.com/blog/2010/brook-revisits-plan-to-throw-one-away [I] n 1975、プログラマーに「最初のバージョンを捨てる」ように助言し、次に2番目を作成しました1。20周年記念版までに、私は一定の増分反復がはるかに
健全な
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.