【问题标题】:How to find the language from which an executable was compiled from?如何找到编译可执行文件的语言?
【发布时间】:2011-09-16 05:48:55
【问题描述】:

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

【问题讨论】:

  • 可能重复 - stackoverflow.com/questions/1704202/…。在大多数情况下,会有“独特”的特征,但它不会是微不足道的——例如。没有标有语言、编译器、版本等的标准元数据标头。

标签: programming-languages executable


【解决方案1】:

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

【讨论】:

  • 您可以对 general 情况给出不合格的 no,因为我现在可以设计两种简单的语言,并为每种语言制作编译器来生成准确的每种语言中“相似”程序的相同可执行文件。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我还不如扔一个迟到的答案。

    即使给定编程语言的编译器决定丢弃一些元数据,例如数据部分中的符号,并显示“从 Joe 的 C 编译器版本 4.1.104 编译”之类的消息,但也没有什么能阻止我写作一个 Go 编译器,它将相同的消息写入数据部分的相同位置,以欺骗毫无戒心的人查看可执行文件。

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

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

    答案是否定的。

    TL;DR:你总是可以恶搞的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多