Programming languages 如何找到编译可执行文件的语言?

Programming languages 如何找到编译可执行文件的语言?,programming-languages,executable,Programming Languages,Executable,给定一个应用程序的可执行文件(Windows、Linux或Mac OS X),有没有办法找出用于编写该应用程序的编程语言?在一般情况下,我认为没有。但是,在特定的情况下,这是可能的。除非有一些特定的元数据与之关联,或者有一些特定于语言的功能与该exe关联,否则这种可能性很小。可执行文件(通常)是针对特定平台编译的代码,或者是针对特定语言及时编译的中间代码。在JIT代码的情况下,您可能能够确定其.NET或其他某种语言是否会生成中间代码,但在大多数情况下,这是一项相当困难且不合理的任务。我可能错了,

给定一个应用程序的可执行文件(Windows、Linux或Mac OS X),有没有办法找出用于编写该应用程序的编程语言?

在一般情况下,我认为没有。但是,在特定的情况下,这是可能的。

除非有一些特定的元数据与之关联,或者有一些特定于语言的功能与该exe关联,否则这种可能性很小。可执行文件(通常)是针对特定平台编译的代码,或者是针对特定语言及时编译的中间代码。在JIT代码的情况下,您可能能够确定其.NET或其他某种语言是否会生成中间代码,但在大多数情况下,这是一项相当困难且不合理的任务。我可能错了,但据我的理解,这是不可能的。

我不妨迟交一个答案

即使给定编程语言的编译器决定抛出一些元数据,例如数据段中的符号,并显示类似“从Joe的C编译器版本4.1.104编译”的消息没有任何东西——没有任何东西可以阻止我编写一个Go编译器,将相同的消息写入数据段中的相同位置,以欺骗正在查看可执行文件的毫无戒心的人

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

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

答案是否定的

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

你可以对一般情况给予无保留的拒绝,因为我现在可以设计两种简单的语言,并为每种语言制作编译器,为每种语言的“类似”程序生成完全相同的可执行文件。可能重复-。在大多数情况下,都会有“与众不同”的特性,但这并不是微不足道的——例如,没有一个标准的元数据头,上面印有语言、编译器、版本等。