是否可以查看目标代码并告诉最初使用哪种语言来生成它?或者语言是否在目标代码上留下痕迹或印章?各种语言的编译器是否使用固定格式为给定的ISA开发目标代码?
答案 0 :(得分:2)
没有通用算法,但在实践中通常是可能的。通常,您只需查看应用程序所依赖的库 - 例如,如果Windows应用程序依赖于msvcrt.dll,那么它很可能是使用Visual C ++编译的C或C ++程序。有时编译器会在.data
部分留下痕迹。这是我在打开“Hello,World!”时看到的内容 - 就像Haskell二进制文件(用GHC编译)在十六进制编辑器中一样:
以下是GCC的“版权声明”:
训练有素的眼睛甚至可以通过查看反汇编来识别编译器版本(每个编译器稍微改进代码并且有自己的实现怪癖)。如果您需要自动执行此操作,我建议您查看机器学习技巧。
答案 1 :(得分:1)
不。 x86是x86-一旦它采用该格式,就没有原始语言的痕迹。