Анализ объектных файлов Delphi с использованием спецификации семантики машинных команд | Прикладная дискретная математика. Приложение. 2012. № 5.

Анализ объектных файлов Delphi с использованием спецификации семантики машинных команд

The object Delphi files decompilationproblem is considered. The DCU format specification in Flext and disassembler DCU32INTof the DCU format specification are made use for the Delphi compiled files analysis. Mechanismof the code semantics description for Intel x86 processors is developed. Using thisgives much of opportunities and makes the decompilation process more effective.

Delphi object files analysis using specification of machine commands semantics.pdf Процесс декомпиляции является важной, а при решении некоторых задач (таких,как поддержка программного обеспечения без возможности использования исходно-го кода или восстановление исходного кода) и неотъемлемой частью разработки про-граммного обеспечения. В общем случае (для произвольных исполняемых файлов) этазадача является очень сложной, например требуется разделить память программы накод и данные. В объектных файлах Delphi программа оказывается более структуриро-ванной, например выделены блоки памяти, соответствующие коду каждой процедуры;имеется информация о типах данных; может присутствовать отладочная информация.Таким образом, при работе с файлами dcu [1] задача декомпиляции становится болеедостижимой.В общем виде формат файла dcu выглядит следующим образом: сначала идёт за-головок, в котором содержится общая информация о файле, такая, как размер, времякомпиляции и т. д. После заголовка следует поток теговой информации. Основнуюмассу тегов можно разделить на следующие группы:1) описания включаемых модулей и объектных файлов;2) описания импортируемых из этих модулей определений (типов данных, проце-дур и т. д.);3) описания определений (типов данных, процедур, функций и т.д.) из данногомодуля;4) блок памяти, составленный из блоков кода для процедур и функций, образовконстант и т. д.;5) информация для редактора связей (в какие места блока памяти необходимозанести адреса, получаемые из других модулей);6) отладочная информация.В программе DCU32INT [2] используется статический дизассемблер, который,в частности, не может определить имя виртуального метода по коду его вызова: дляэтого требуется проследить последовательность присвоений регистров и ячеек памя-ти и по смещению в таблице виртуальных методов извлечь имя вызываемого метода.Для решения подобных задач требуется использовать информацию о семантике ма-шинных команд. Основным результатом данной работы является создание структурданных, предназначенных для описания семантики машинных команд процессоровсемейства Intel x86 [3] и механизмов их использования в сочетании с дизассемблеромDCU32INT. Предложенные структуры данных позволяют точно описать семантикунаиболее важных для рассматриваемой задачи инструкций. При разборе инструк-ции используется результат её анализа существующим статическим дизассемблером,позволяющий определить выполняемую операцию и её аргументы. Семантика выпол-няемых операций задается при помощи специализированных операторов и выраже-ний, предназначенных для решения этой задачи. Для грубого определения семантикиостальных (не описанных явно) команд используются таблицы «опкодов» [4], в ко-торых содержится информация об операндах, мнемоника инструкции, изменяемых итестируемых флагах и т. д. Хотя грубые описания семантики не позволяют определитьточные выражения для вычисляемых операцией значений, они могут дать информа-цию о времени жизни в ячейках памяти. В результате при анализе кода подпрограммв dcu появляется возможность анализа потоков данных, порождаемых наиболее важ-ными конструкциями языка Delphi, например вызовом виртуального метода.Таким образом, разработан механизм описания спецификаций семантики машин-ных команд. С его помощью решаются задачи извлечения имён вызываемых вирту-альных методов, распространения констант, подстановки имён используемых перемен-ных и т. д., которые позволяют существенно сократить временные ресурсы, требуемыена получение описания алгоритма исследуемой программы. Конечной целью исследо-вания является разработка методов анализа и программы декомпилятора объектныхфайлов Delphi на основе программы DCU32INT в язык высокого уровня, максимальносоответствующий исходному коду исследуемой программы.

Ключевые слова

Авторы

ФИООрганизацияДополнительноE-mail
Михайлов Андрей АнатольевичИнститут динамики систем и теории управления СО РАН, г. Иркутскаспирантmikhailov@icc.ru
Всего: 1

Ссылки

Хмельнов А. Е. Язык FlexT для спецификации бинарных форматов данных: дис. ... канд. техн. наук. Иркутск, 2000. 118 с.
http://hmelnov.icc.ru/DCU/index.ru.html -Инструмент DCU2INT (для разбора юнитов Delphi).
http://www.intel.com/content/www/us/en/processors/architectures-software-developer- manuals.html -Intel Architecture Software Developer's Manual.
http://ref.x86asm.net/geek32.html - X86 Opcode and Instruction Reference.
 Анализ объектных файлов Delphi с использованием спецификации семантики машинных команд | Прикладная дискретная математика. Приложение. 2012. № 5.

Анализ объектных файлов Delphi с использованием спецификации семантики машинных команд | Прикладная дискретная математика. Приложение. 2012. № 5.