Трассировка языка на объектном коде - PullRequest
1 голос
/ 19 июня 2011

Можно ли посмотреть на объектный код и сказать, какой язык изначально использовался для его создания?или язык оставляет след или штамп на объектном коде?компиляторы разных языков используют фиксированный формат для данного ISA для разработки объектного кода?

Ответы [ 2 ]

2 голосов
/ 19 июня 2011

Нет общего алгоритма, но на практике это часто возможно.Обычно вы можете просто посмотреть библиотеки, от которых зависит приложение - например, если приложение Windows зависит, например, от msvcrt.dll , есть большая вероятность, что это программа на C или C ++, скомпилированная с Visual C ++.Иногда компилятор оставляет следы свидетельства в разделе .data.Вот что я вижу, когда открываю «Hello, World!» - например, двоичный файл Haskell (скомпилированный с GHC) в шестнадцатеричном редакторе:выглядит так:

GCC

Опытный глаз может даже распознать версию компилятора, взглянув на разборку (каждый компилятор оптимизирует код немного по-своему и имеет свои особенности реализации).Если вам нужно автоматизировать это, я предлагаю рассмотреть методы машинного обучения.

1 голос
/ 19 июня 2011

Неа.x86 - это x86 - после того, как он в этом формате, оригинального языка не осталось и следа.

...