madExcept + UPX - PullRequest
       22

madExcept + UPX

1 голос
/ 02 марта 2009

У меня проблемы с использованием madExcept + UPX на Delphi 2007. Всякий раз, когда я открываю сжатое приложение, появляется диалоговое окно исключения Windows с кодом 0xc0000005 У кого-нибудь есть решение для этого?

Спасибо!

Ответы [ 5 ]

13 голосов
/ 02 марта 2009

Для отслеживания стека исключений и т. Д. Требуется сопоставить адреса кода в памяти с виртуальными адресами, хранящимися в исполняемом файле, чтобы их можно было сопоставить либо с файлом .map, либо с информацией отладки, которая указывает на функцию или исходный файл и строку. Обычно отображение прямое и относительно линейное.

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

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

FWIW, я лично не рекомендую использовать исполняемые упаковщики.

5 голосов
/ 05 мая 2009

Это уже освещалось на собственных форумах MadShi:

Forum Article # 1
Forum Article # 2

Вокруг десяток других тем, но подытожив долгую историю, MadExcept 3. * и после, как известно, работает нормально с UPX, ниже нет.

3 голосов
/ 02 марта 2009

Этот код исключения обычно означает, что это необработанное внешнее исключение. Что произойдет, если вы не используете UPX? Исчезает ли исключение?

Это может не иметь никакого отношения к MadExcept, кстати. Этот код исключения обычно указывает на то, что исключение произошло до того, как могут быть установлены обработчики исключений VCL, и, следовательно, это может произойти до того, как MadExcept также будет подключен.

РЕДАКТИРОВАТЬ: Судя по вашему комментарию, техника сжатия UPX может мешать способности MadExcept / Delphi подключать цепочку обработчиков исключений. Вы проверили ссылку, предоставленную Брюсом?

0 голосов
/ 05 мая 2009

Попробуйте следующий переключатель с upx:

- сжимать-экспорт = 0

0 голосов
/ 02 марта 2009

Я успешно использовал madExcept с ASProtect, так что я знаю, что его можно использовать со сжатием exe. Однако могут быть некоторые конкретные проблемы с UPX .

...