1

オブジェクトコードを見て、それを生成するためにどの言語が使われているかを知ることは可能ですか?またはその言語がオブジェクトコードにトレースまたはスタンプを残していますか?さまざまな言語のコンパイラは、オブジェクトコードを開発するために与えられたISAに対して固定フォーマットを使用しますか?オブジェクトコード上の言語のトレース

答えて

2

一般的なアルゴリズムはありませんが、実際には多くの場合可能です。通常、アプリケーションが依存するライブラリを見ることができます。たとえば、Windowsアプリケーションがmsvcrt.dllに依存する場合、Visual C++でコンパイルされたCまたはC++プログラムである可能性が高くなります。時にコンパイラが.dataセクションに証拠の痕跡を残すことがあります。ここで「こんにちは、世界!」開いたときに、私が見たものである - バイナリエディタで(GHCでコンパイルされた)のようなHaskellのバイナリを:

GHC

ここでGCCの「著作権表示」は次のようになります。

GCC

訓練された目は、逆アセンブリを見ることによってコンパイラのバージョンを認識することさえできます(すべてのコンパイラは、コードをわずかに異なる方法で最適化し、独自の実装方法を持っています)。これを自動化する必要がある場合は、機械学習技術を検討することをお勧めします。

+0

+1実際には、どのコンパイラがDOS時代に使われたのかを知るヒューリスティックツールがありました。まだいくつか残っていると確信しています。 –

1

いいえ。 x86はx86形式です。いったんその形式になると、元の言語の痕跡はありません。

関連する問題