1

是否可以查看目標代碼並確定最初使用哪種語言來生成目標代碼?或者該語言在目標代碼上留下痕跡還是印記?各種語言的編譯器是否使用給定ISA的固定格式來開發目標代碼?目標代碼上的語言跟蹤

回答

2

沒有通用的算法,但實際上通常是可行的。通常你可以看看應用程序所依賴的庫 - 例如,如果Windows應用程序依賴於msvcrt.dll,那麼它很有可能是使用Visual C++編譯的C或C++程序。有時編譯器會在.data部分留下痕跡。以下是我看到打開的時候 - 就像在一個十六進制編輯器哈斯克爾二進制(與GHC編譯)「你好,世界!」:

GHC

下面是GCC的「版權聲明」的模樣:

GCC

受過訓練的眼睛甚至可以通過查看反彙編(每個編譯器稍微不同地優化代碼並且有自己的實現怪癖)來識別編譯器版本。如果您需要自動執行此操作,我建議您查看機器學習技巧。

+0

+1實際上,有一些啓發式工具可以告訴DOS編譯器在DOS環境下的使用情況。我相信還有一些東西。 –

1

沒有。 x86是x86-一旦它是這種格式,就沒有原始語言的痕跡。