5

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

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

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

ありがとう、

-マイケル・バージ

4

3 に答える 3

2
  1. COFFファイル形式(Windows EXEおよびDLL)をダンプするPEDUMPを使用して何かを見つけることができるかもしれませんが、フラグがあるとは思いません。実行可能ファイルがデバッグ用にコンパイルされたかどうかは、Dependecy Walkerを実行し、EXEがデバッグDLL(MSVCRT5D.DLLなどのDが付加されたもの)にリンクされているかどうかを確認することで推測できます。

    VC6 DebugおよびReleaseのFYIは、単純な名前付きビルドであり、モードごとではなく、それぞれがコンパイラーとリンカーの設定のコレクションをビルドします。EXEは単なるコードであり、デバッグexeは通常最適化されていないため、デバッガーを簡単に使用できます(最適化されたコードのデバッグとは異なります)。したがって、デバッグシンボルを使用してリリースバイナリをコンパイルできます。これは、最適化されたコードエラーを追跡するのに役立つ場合があります。

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

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

于 2011-01-26T15:22:53.447 に答える
0

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

于 2011-01-26T15:12:14.383 に答える
-2

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

于 2011-01-26T15:06:19.947 に答える