4

私は約8年前にVisual C++ 6.0で書いたものの実行可能ファイルを見つけ出しました。私はソースコードをバックアップしたことはありませんが、私は常にデバッグモードですべてをコンパイルしたと思います。また、コンパイラのデバッグシンボルなどがない限り、実行可能ファイルをソースコードに逆コンパイルすることはできません。コードには感傷的な価値がありますが、私はそれを取り出すことがミッションクリティカルではありません。デバッグコンパイルされたバイナリからソースを取得できますか?

これは背景です。ここに質問があります:

  1. 実行ファイルがデバッグモードでコンパイルされているかどうかを確認するにはどうすればよいですか?
  2. そうであれば、実行可能なデバッグモードにはどのような情報がありますか?
  3. 完全なソースコードを取得できますか?それに失敗すると、リリース版と比較して逆コンパイル時に大幅な改善が得られますか?もしそうなら、どうですか?

おかげで、

- マイケル・バージ

+0

モジュールがコンパイルされたときに、ソースファイルの場所が埋め込まれhttp://stackoverflow.com/questions/947401/anything-wrong-with-releasing-software-in-debug-mode –

答えて

2
  1. 私はあなたがCOFFファイル形式(WindowsのEXEやDLL)をダンプしますPEDUMPを使って何かを見つけるかもしれないのにフラグがあると信じていません。 Dependecy Walkerを実行し、EXEがデバッグDLL(Dの後にMSVCRT5D.DLLなどが付いている)にリンクしているかどうかを確認することで、実行ファイルがむしろ短時間でコンパイルされたかどうかを推測できます。

    FYIのVC6デバッグとリリースは単純な名前のビルドであり、言うまでもなくモードではなく、それぞれがコンパイラとリンカーの設定の集合を構築します。 EXEは単なるコードであり、デバッグは通常最適化されていないため、デバッガを簡単に使用することはできません(最適化されたコードのデバッグと比較して)。したがって、デバッグシンボルでリリースバイナリをコンパイルすることができます。これは、最適化されたコードエラーを追跡するのに便利なことがあります。

  2. デバッグEXEとDLLにはデバッグ情報が含まれていませんでしたが、代わりに同じフォルダに存在し、コンパイル時に生成されたすべてのデバッグシンボル情報を含むサイドカーPDBファイルがありました。

  3. いいえ、ソースはソースであり、シンボルファイルまたは実行可能ファイルにはコンパイルされません。あなたのコードのまともなCバージョンを再生成することができるいくつかの驚くべきデコンパイラがありますが、あなたのソースをいかにうまく再現できるかではなく、Cがどれほどうまくいくかが驚くだけです。

+0

あなたの答えをありがとう。 –

-2

は私がバイナリはデバッグモードでコンパイルされている場合、多くの逆アセンブラソースを表示することができると思います。たとえば、私はOllyDBGを使用していますが、それはソースを表示するオプションがありますが、私は試みたことはありません。

+1

をチェックしてください。ソースファイルがその場所に存在しない場合、ソースを表示することはできません。 –

0

Visual Studioでは、デバッグ実行ファイルにソースが含まれていないため、できません。 Visual Studioは、バイナリファイルとソースファイル名と行番号の間のマッピングのみを含むpdbファイルを生成しますが、それでもソースコードが必要です。これはgccとは異なるかもしれません。私はソース自体をバイナリの中に統合すると思います。

+0

gccはソースをバイナリに統合しません。 – Hasturkun

+0

@ Hasturkun Okayでは、コードにfile:行を注釈します。だからVisual Studioのビルドとの唯一の違いは、ファイル:行情報はバイナリの中に直接あり、VSは別のpdbファイルを使用しているということです。 – tibur

+0

正しい。 (btw、gccビルドバイナリからデバッグシンボルを分離することもできます) – Hasturkun

関連する問題