Есть ли программа для декомпиляции Delphi?

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

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

Лучший инструмент декомпиляции для Delphi, который я видел, - это DeDe. Он может делать много чего, но он даже не пытается создать код Object Pascal в качестве своего вывода, и он не обновлялся со времен Delphi 6. Есть ли что-нибудь получше?


person Mason Wheeler    schedule 02.12.2008    source источник
comment
У вас есть название программы, которая декомпилировала приложение Delphi в исходный псевдо-код C? Я хочу посмотреть, как старая программа 1999 года реализовывала алгоритм. Я не могу запустить приложение для определения поведения, потому что при обработке графики произошла утечка ресурсов, и мне нужно перезагрузить примерно через десять минут использования приложения.   -  person AMissico    schedule 20.05.2010
comment
@AMissico: Согласно письму, это было сделано с помощью IDA Pro с плагином Hex Rays Decompiler.   -  person Mason Wheeler    schedule 21.05.2010
comment
Спасибо за ответ. Я подумал, что это был декомпилятор Hex-Rays. Единственное, что я нашел, это то, что вы описали.   -  person AMissico    schedule 21.05.2010


Ответы (4)


Я не думаю, что есть какие-либо декомпиляторы машинного кода, которые производят код Паскаля. Большинство "декомпиляторов Delphi" анализируют формы и данные RTTI, но фактически не декомпилируют машинный код. Я могу только порекомендовать использовать что-то вроде DeDe (или аналогичное программное обеспечение) для извлечения символьную информацию в сочетании с декомпилятором C, а затем перевести декомпилированный код C в Delphi (существует множество конвертеров исходного кода).

person Vladimir Panteleev    schedule 02.12.2008
comment
FWIW, на заре Delphi был полный декомпилятор. Однако я не видел и не слышал об этом много лет. - person mj2008; 03.12.2008
comment
@ mj2008 Кто-нибудь знает об этом больше? У меня есть проект Delphi 4/5, с сегодняшнего дня это может быть только начало :-) - person Daniel Alder; 21.08.2016
comment
Delphi использует другую семантику вызова функций (не __stdcall). В тесте с retdec.com он забыл сохранить возвращаемые значения и неправильно определил начало и конец функции, что сделало результат непригодным для использования. - person Daniel Alder; 11.11.2016
comment
@DanielAlder Прошло некоторое время, но IIRC соглашение о вызовах специфично для серверной части компилятора, а не для языка - как таковое, вы увидите то же соглашение о вызовах, которое используется в компиляторах Borland C. - person Vladimir Panteleev; 11.11.2016

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

person Hanan N.    schedule 08.11.2012
comment
Похоже, что IDR работает только до D2009 (с теоретической поддержкой D2010, но архив контекстных данных для него защищен паролем) и не поддерживает XE или более позднюю версию, или для фактической декомпиляции кода обратно в Паскаль. - person Mason Wheeler; 09.11.2012
comment
@MasonWheeler D2010 теперь бесплатен без защиты паролем. - person Hanan N.; 11.06.2014

Вот список: http://delphi.about.com/od/devutilities/a/decompiling_3.htm (и на этой странице упоминается еще несколько: http://www.program-transformation.org/Transform/DelphiDecompilers)

Иногда я использовал DeDe, но на самом деле он не такой мощный, и он не соответствует текущим версиям Delphi (я считаю, что последняя поддерживаемая версия - Delphi 7)

person PatrickvL    schedule 03.12.2008

Такие языки, как Delphi, C и C ++, компилируются в машинный код, машинный код процессора, а выходные исполняемые файлы содержат мало или совсем не содержат метаданных. Это контрастирует с Java или .Net, которые компилируются в объектно-ориентированный, независимый от платформы байт-код, который сохраняет имена методов, параметры методов, классы и пространства имен, а также другие метаданные.

Таким образом, существует гораздо менее полезная декомпиляция, которую можно выполнить в коде Delphi или C. Однако Delphi обычно имеет встроенные данные формы для любой формы в проекте (сгенерированные строкой $ R * .dfm), а также имеет метаданные по всем опубликованным свойствам, поэтому инструмент, специфичный для Delphi, сможет извлечь эту информацию.

person Anthony    schedule 03.12.2008
comment
Даже если это не управляемый код, насыщенный рефлексией, нетрудно прочитать ASM, созданный Delphi, и преобразовать его в моей голове обратно в код Object Pascal. Я много отлаживаю на этом уровне. Все, что вы теряете, - это имена, и большую часть времени вы можете вывести их из контекста. - person Mason Wheeler; 03.12.2008
comment
Совет: если вы думаете, что это легко, начните реализовывать его самостоятельно. - person Jim McKeeth; 08.12.2008
comment
Мейсон: вы делали этот тест кода с включенной оптимизацией? - person Marco van de Voort; 11.03.2011