Как сказал Срджан, в общем случае декомпиляция C (или C ++) программы невозможна.Слишком много информации потеряно в процессе компиляции.Например, рассмотрим объявление, такое как int x
, оно «потеряно», так как оно напрямую не генерирует никаких команд машинного уровня.Эта информация нужна компилятору только для проверки типов.
Теперь, однако, существует возможность разборки, которая переводит скомпилированный исполняемый файл на уровень ассемблера.Однако интерпретация сборки может быть (будет?) Сложной и, безусловно, трудоемкой.Доступно несколько дизассемблеров, если у вас есть деньги, IDA-Pro, вероятно, является отраслевым стандартом для дизассемблеров, и если вы выполняете эту работу, стоит несколько тысяч долларов за лицензию.Есть несколько доступных дизассемблеров с открытым исходным кодом, Google может их найти.
Теперь, когда говорят, что были попытки создать декомпиляторы, у IDA-Pro есть один, и вы можете посмотреть на http://boomerang.sourceforge.net/ в дополнение к Snowman, указанному выше.
Наконец, другие языки более дружественны к декомпиляции, чем C или C ++.Например, программы на C # декомпилируются с такими инструментами, как dotPeek
или ilSpy
.Аналогично с Java существует ряд инструментов, которые могут преобразовывать байт-код Java обратно в исходный код Java.