ресурсы и теория декомпиляции - PullRequest
4 голосов
/ 27 апреля 2011

Должен быть миллион книг и статей по теории и технике построения компиляторов.Есть ли ресурсы на обратное?Я не заинтересован в какой-либо конкретной платформе HW.В поисках хороших книг / исследовательских работ, которые подробно исследуют предмет и трудности.

Ответы [ 3 ]

2 голосов
/ 02 июля 2011

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

1 голос
/ 27 апреля 2011

Декомпиляция действительно неверна.Декомпиляторы компилируют объектный код в исходное представление.Во многих отношениях их легче писать, чем в традиционных компиляторах - «исходный» код уже проверен на синтаксис и обычно очень точно отформатирован.

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

В тех случаях, когда источник предназначен для четко определенной ВМ, часто эта оптимизация оставляется на усмотрение JIT-компилятора, а полученный декомпилированный код очень читабелен - вмногие случаи практически идентичны оригиналу.Компиляторы этого типа часто оставляют некоторые или все символы в объектном коде, позволяя их восстановить.Другие включают номера строк, чтобы помочь с отладкой и устранением неполадок.Все это помогает восстановить исходный код.

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

0 голосов
/ 15 февраля 2018

Я писал о декомпиляторах для динамических языков здесь .

Обратите внимание, что это для динамических языков с пользовательскими (высокоуровневыми) ВМ.

...