• ベストアンサー

言語の判断

ソフトがどんな言語で書かれているのかを判断する場合、逆アセンブルする方法があると思います。 すべてのソフトが逆アセンブルでどんな言語で書かれているか調べることは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

ある程度推測することは可能ですが、完全に判別することは無理です。 判別するための手がかりとしては、実行イメージの中に含まれるランタイムモジュールと、デバッグ情報があります。 このうち、十分なデバッグ情報が含まれていれば、かなりの確率で判別することができると思いますが、最終的にリリースされたものは、デバッグ情報がない場合が多いので、かなり難しいと思います。 ランタイムモジュールは参考にはなりますが、決め手にはなりません。というのも、多くの言語処理系は、いったんC言語を介して機械語を生成する方式をとっているからです。例えば、PascalやFortranやAdaなどは、まずC言語へのトランスレータをかけて、それからCコンパイラを使って実行イメージを作っている場合がよくあります。初期の頃(および現在も一部)のC++も同じ方式をとっていました。 また、C言語の場合も、多くの処理系では、いったんアセンブリ言語のソースを出力し、それをアセンブルします。 このように、最初にプログラマが記述した言語から、機械語に翻訳される過程で、複数の言語を経由することが多々あるわけです。 Ada → C → アセンブリ → 機械語 という段階で翻訳された場合、元の言語がアセンブリ言語であるとかC言語であるとかの結論を出したとしても、それ自体は間違いではありませんが、期待した答えはAdaなわけですよね。そういう意味で、どこまでたどれるかは、何ともいえないと思います。

その他の回答 (2)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

最近は滅多に無いですが、高級言語を使わずにハンドアセンブルでガリゴリ書けなくもないです。 特定の言語で書かれているように偽装する事も不可能ではないし、個人で開発した言語なんかだったら分かりようもないし。 ソフトが何らかの言語で書かれていると考える前提に拠り所が無いですし、「すべての」ソフトには当てはまらないと思います。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

>逆アセンブルする方法があると思います。 まず逆アセンブル自体ではどんな言語で書かれているかはわかりません。 逆アセンブルとは単にバイナリコードをアセンブリコード(文字列)にするだけです。 ネイティブコードを吐く高級言語は限られています。 80%はC/C++でしょう。Windowsならdelphiという可能性もあります。 コンパイラの最適化には癖があるしPEフォーマットの先頭をみれば ある程度コンパイラの種類の推測はできるでしょう。 ただしコードは不可逆であるため100%断定することは無理です。

関連するQ&A