Отладочные сборки имеют тенденцию генерировать выходные данные, которые можно легко соотнести с высокоуровневыми языковыми конструкциями. Вы можете идентифицировать переменные, тесты, циклы и т. Д., Просто взглянув на машинный код. Вы не получите имена переменных, но это обычно относится к числу наименее важных соображений при обратном проектировании.
Оптимизированный код, OTOH, переставляет инструкции, разворачивает циклы, повторно использует слоты для нескольких переменных, разделяет блоки кода между функциями, вставляет небольшие функции и т. Д., Что значительно затрудняет распознавание исходного намерения. Это также затрудняет отладку, даже если вы владеете кодом, поскольку текущий маркер строки часто вводит в заблуждение, а переменные, как правило, исчезают или показывают случайную чушь.
Ничто из этого не делает обратное проектирование невозможным. Это просто больше работы, чтобы выявить смысл.