2011-09-16 52 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:你總是可以欺騙。