1

是否可以查看目标代码并确定最初使用哪种语言来生成目标代码?或者该语言在目标代码上留下痕迹还是印记?各种语言的编译器是否使用给定ISA的固定格式来开发目标代码?目标代码上的语言跟踪

回答

2

没有通用的算法,但实际上通常是可行的。通常你可以看看应用程序所依赖的库 - 例如,如果Windows应用程序依赖于msvcrt.dll,那么它很有可能是使用Visual C++编译的C或C++程序。有时编译器会在.data部分留下痕迹。以下是我看到打开的时候 - 就像在一个十六进制编辑器哈斯克尔二进制(与GHC编译)“你好,世界!”:

GHC

下面是GCC的“版权声明”的模样:

GCC

受过训练的眼睛甚至可以通过查看反汇编(每个编译器稍微不同地优化代码并且有自己的实现怪癖)来识别编译器版本。如果您需要自动执行此操作,我建议您查看机器学习技巧。

+0

+1实际上,有一些启发式工具可以告诉DOS编译器在DOS环境下的使用情况。我相信还有一些东西。 –

1

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