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