2009-03-06 2 views
18

Solarisから実行するためにCからコンパイルされた実行可能ファイルを指定すると、関連する不完全な実行可能ファイルをコンパイルするためにどのコンパイラが使用されたかを判断できますか?プログラムをコンパイルするためにどのコンパイラが使用されたかを知ることができますか?

文字列またはファイルコマンドのいずれかを使用しているときに何も表示されず、魔法は何か特定のものを含んでいないようです。

一般に、コンパイラは実行可能な出力ファイルに指紋を入れますか?

声援

+0

良い質問。私は、(バージョンとコンパイラ設定の間でさえ)違いがあると仮定しますが、コンパイラの検出は簡単な作業ではありません。 –

+0

興味深い質問。あなたはどのようなOSを考えていますか? –

+0

それはあなたがどのくらい作業しなければならないかによっても異なります。たとえば、gccはccとは異なるoファイルを作成します。静的プログラムまたは動的にロード可能なプログラムを使用している場合は、どのライブラリが使用されているかを確認することもできます。言い換えれば、あなたの指紋は文字列ではなく論理です。 –

答えて

2

実行可能ファイルが取り除かれていない場合は、してみてくださいは/ usr/CCS /ビンMCS-P は、これは通常、コンパイラ、リンカとすべてのヘッダファイルは取り除かれていない

6

はいIDAはこれに最適です。それはFLIRTと呼ばれる技術を使用します。

0

Visual StudioとGCCは、通常、異なる起動ルーチン(mainを呼び出す)に従います。それはおそらくヒントでしょう。私は他人について知らない。 DLLのために、私の頭の上から同様の何かを考えることができません。

4

PEIDトリックを行います。それは一般的に素晴らしいです。明らかにPEIDはWindowsツールですが、コンパイラに表示する必要があります(特定のバージョン情報もあります)

+1

PEファイルでのみ動作します。 SolarisはELFまたはおそらくa.outです。 – MSalters

+0

IDAはsolaris elfsで動作します。私のポストを参照してください。 –

+0

オプスがそれを見逃し、良い点。 –

2

識別しようとしているコンパイラごとに小さなテストアプリケーションをビルドします。その後、ヘキサエディタで結果を確認し、パターンを見つけようとします。 Microsoftのリンカーの"Rich" signaturesのように、それは本当に明らかになるかもしれません。

0

コンパイラは、通常、コンパイルされたファイルに平文として独自の「署名」を追加します。文字列などのツールを使用して、平文を取り出すことができます。

の$ CC:

+0

@イグナチオ、私はそれを試みたが、何も本当に私に飛び出した。 –

1

を使用が表示されます

のa.out a.outの-Oのhello.c

$ファイル:ELF 32ビットのMSB実行SPARC32PLUSバージョン1、V8 +必須の、動的にリンクされ、

を取り除きません

$ strings -a a.out | grepのCCの

/opt/solarisstudio12.3/prod/bin/cc -Oのhello.c

$ dwarfdump -iのa.out | O; grepのは

DW_AT_SUN_compile_options第Xa compile_o R = 太陽Cを5.12 SunOS_sparcパッチ148917から07 2013年10月18日、バックエンド、生; CD。

のa.out a.outの

$ファイルa.outの

$ストリップ:剥奪

ELF 32ビットのMSB実行SPARC32PLUSバージョン1、V8 +必須の、動的にリンクされたが、

を剥奪しました

$ strings -a a。アウト| grep cc

(なし)

関連する問題