Что такое компиляция и декомпиляция?

Компиляция – это преобразование программы из исходного текстового кода в байт-код.

При написании софта разработчики ПО используют определенный язык программирования. У каждого языка существуют свой текстовый редактор и удобная подсветка синтаксиса, имеются определенные наборы правил написания кода, а также обширная библиотека специальных команд, позволяющая грамотно составлять программу. На этапе проектировки разработчиками всегда допускаются ошибки, поэтому при сырых тестах программного обеспечения используется отладчик.

Чтобы протестировать программу на работоспособность, достаточно воспользоваться встроенным интерпретатором кода, который на лету преобразует текстовые команды в машинный код. За пределами среды, разумеется, такая программа функционировать еще не будет: для полноценной работы софта требуется компилятор.

В процессе экспорта готовой программы компилятор преобразовывает высокоуровневый код разработчика в конечный низкоуровневый. В отдельной директории создается папка с окончательной версией программы. Рядом с файлом запуска экспортируются вспомогательные библиотеки, картинки и материалы, используемые в проекте.

Скомпилированная программа будет работать на любом устройстве, под которое она создавалась. Процесс компиляции, как правило, необратим, поэтому существует альтернативный способ достать исходный код из программы.

Декомпиляция – сложный процесс воссоздания исходника из машинного кода, или обратная разработка.

При данном методе можно получить код, эквивалентный тому, что писал разработчик. Не всегда процесс декомпиляции дает положительные результаты: маленькие программы вполне поддаются анализу, чего не скажешь о больших.

Прежде чем пытаться распотрошить софт на исходные составляющие, в первую очередь необходимо знать его язык программирования. После этого можно предварительно провести дизассемблирование программы и тщательный анализ его библиотек RTL.

Только в этом случае можно приблизительно восстановить программу в первозданном виде. Как правило, полученный код значительно отличается от написанного программистом: он выглядит запутанным, и разобраться в таком исходнике порой бывает проблематично.

Нередко при компиляции среды разработки применяется метод обфускации (запутывания) кода. В таком случае процедура декомпиляции становится затруднительной или практически невозможной.

Цель декомпиляции – взлом и модификация программы, удаление триала и внедрение вируса. Реже декомпиляция нужна при утере исходников.

Ардуино+