2011-09-16 35 views
0

给定应用程序的可执行文件(Windows,Linux或Mac OS X),是否有办法找出用于编写该应用程序的编程语言?如何从中编译可执行文件的语言?

+0

可能的重复 - http://stackoverflow.com/questions/1704202/determine-source-language-from-a-binary/1704449#1704449。在大多数情况下,将会有“独特”的特征,但它不会是微不足道的 - 例如没有用语言,编译器,版本等标记的标准元数据头。 – StuartLC

回答

0

在一般情况下,我会认为不是。然而,在特定情况下,这可能是可能的。

+0

您可以给_general_个案提供一个不合格的** no **,因为我现在可以设计两种简单的语言,并为编译器生成精确的每种语言中“相似”程序的相同可执行文件。 –

0

除非有一些与它相关的特定元数据或某个与该exe相关的语言特定功能,否则极不可能。可执行文件(通常)是针对特定平台或中间代码编译的代码,它们将针对特定语言进行即时编译。在JIT代码的情况下,您可能能够确定其.NET或其他语言是否产生中间代码,但大多数情况下这是一项相当困难和不合理的任务。我可能是错的,但根据我的理解,这是不可能的。

0

我不妨在最后回答。

即使给定编程语言的编译器决定在数据段中抛出一些元数据(如符号),并带有诸如“从Joe's C compiler版本4.1.104编译”之类的消息,没有任何东西可以阻止我从编写一个Go编译器,将相同的消息写入数据部分中的相同位置,以诱骗不知情的人查看可执行文件。

更不用说,可以为任何给定的语言编写无数的编译器。

假设我们看一个只包含几个字节的可执行文件......只不过是递增一个寄存器罢了。数百种不同的语言允许编译器理论上可以优化为无元数据的单节可执行文件。

答案根本不是。

TL; DR:你总是可以欺骗。

相关问题