プログラムのコンパイルに使用されたコンパイラを確認できますか?
-
03-07-2019 - |
質問
CからコンパイルされてSolarisで実行される実行可能ファイルがある場合、関連する不完全な実行可能ファイルをコンパイルするために使用されたコンパイラを特定できますか?
文字列またはファイルコマンドを使用すると何も表示されず、マジックには特定の何かが含まれていないようです。
通常、コンパイラは実行可能出力ファイルに指紋を入れますか?
乾杯、
解決
実行可能ファイルが削除されない場合は、/ usr / ccs / bin mcs-pを試してください これは通常、コンパイラ、リンカー、および使用されているすべてのヘッダーファイルを表示します
他のヒント
はい、IDAはこれに最適です。 FLIRT という技術を使用しています。
PEID がトリックを行います。それは一般的にうまく機能します。明らかにPEIDはWindowsツールですが、重要ではなく、コンパイラー(場合によっては特定のバージョン情報)を表示する必要があります
特定しようとしている各コンパイラーで小さなテストアプリをビルドします。次に、16進エディタで結果を見て、パターンを見つけてみてください。たとえば、" Rich" Microsoftのリンカーからの署名。
削除されない:
$ cc -O hello.c
$ file a.out
a.out:ELF 32ビットMSB実行可能ファイルSPARC32PLUSバージョン1、V8 +必須、動的リンク、ストリップなし
$文字列-a a.out | grep cc
/opt/solarisstudio12.3/prod/bin/cc -O hello.c
$ dwarfdump -i a.out | grep compile_o
DW_AT_SUN_compile_options Xa; O; R = Sun C 5.12 SunOS_sparc Patch 148917-07 2013/10/18; backend; raw; cd;
削除:
$ strip a.out
$ file a.out
a.out:ELF 32ビットMSB実行可能ファイルSPARC32PLUSバージョン1、V8 +必須、動的リンク、ストリップ済み
$文字列-a a.out | grep cc
(なし)
Visual StudioとGCCは通常、異なる起動ルーチン(mainを呼び出します)に従います。それはヒントかもしれません。しかし、他の人については知りません。 dllについては、私の頭上から似たようなものは考えられません。
コンパイラは通常、独自の「署名」を追加します。コンパイル済みファイルのプレーンテキストとして。文字列などのツールを使用して、プレーンテキストを抽出できます。