Compiler construction 目标代码上的语言跟踪

Compiler construction 目标代码上的语言跟踪,compiler-construction,programming-languages,object-code,Compiler Construction,Programming Languages,Object Code,是否有可能查看一个目标代码,并说出最初使用哪种语言生成它?或者该语言是否在目标代码上留下了痕迹或印记?不同语言的编译器是否对给定的ISA使用固定格式来开发目标代码 没有。x86就是x86——一旦它是这种格式,就没有原始语言的痕迹。没有通用算法,但在实践中通常是可能的。通常你可以只看应用程序依赖的库——例如,如果Windows应用程序依赖于它,那么它很可能是用Visual C++编译的C或C++程序。有时编译器会在.data部分留下证据痕迹。以下是我在十六进制编辑器中打开“Hello,World!

是否有可能查看一个目标代码,并说出最初使用哪种语言生成它?或者该语言是否在目标代码上留下了痕迹或印记?不同语言的编译器是否对给定的ISA使用固定格式来开发目标代码

没有。x86就是x86——一旦它是这种格式,就没有原始语言的痕迹。

没有通用算法,但在实践中通常是可能的。通常你可以只看应用程序依赖的库——例如,如果Windows应用程序依赖于它,那么它很可能是用Visual C++编译的C或C++程序。有时编译器会在
.data
部分留下证据痕迹。以下是我在十六进制编辑器中打开“Hello,World!”时看到的内容,如Haskell binary(使用GHC编译):

以下是GCC的“版权声明”内容:


训练有素的眼睛甚至可以通过反汇编来识别编译器版本(每个编译器优化代码的方式略有不同,并且有自己的实现怪癖)。如果您需要将其自动化,我建议您看看机器学习技术。

+1事实上,在DOS时代,有一些启发式工具可以告诉您使用了哪种编译器。我肯定还有一些。