Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 21:50   #1
ZeroCount
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 31
Вопрос Декомпиляция при изучении программирования

Здравствуйте.
Я учусь программировать.
Хотел бы спросить, имеет ли смысл, для лучшего понимания процесса, декомпилировать программы с которыми уже давно работал?
Если знаешь, как программа должна выглядеть в готовом виде, можно попытаться разобраться в исходнике, понять, что потребовалось сделать, чтобы программа выглядела именно так...
И как вообще можно узнать на каком языке написанна программа (я имею ввиду те случаи, когда к программе не прилагается документация и/или исходный код)?
ZeroCount вне форума Ответить с цитированием
Старый 05.04.2011, 22:05   #2
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

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

Смысла, думаю, особого нет, вот исходники других программ есть смысл смотреть. Там можно подметить для себя новое инженерное решение или возможную фичу для своего приложения итд.итп.
"Тяжело в учении, легко в бою" - А.В. Суворов
Ivan_32 вне форума Ответить с цитированием
Старый 07.04.2011, 00:14   #3
ZeroCount
Пользователь
 
Регистрация: 31.10.2010
Сообщений: 31
По умолчанию

Спасибо за ответ.
Цитата:
Сообщение от Ivan_32 Посмотреть сообщение
Есть ряд признаков(бинарных) того что программа была откомпилрована тем или иным компилятором
А можно подробнее, что это за признаки (или что об этом можно почитать)?
Насколько я понял, из данной фразы, все программы декомпилируются в ассемблер, а там по структуре кода можно определить, чем это было ранее (я прав?).

Цитата:
Сообщение от Ivan_32 Посмотреть сообщение
но код декомпилированный и исходный код могут сильно различаться, вплоть до 5%-ного сходства
Означает ли это, что программа декомпилированная и снова скомпилированная из полученного кода могут обладать разными свойствами (появление новых ошибок, разница во времени выполнения и т.д.)?
ZeroCount вне форума Ответить с цитированием
Старый 07.04.2011, 01:02   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Насколько я понял, из данной фразы, все программы декомпилируются в ассемблер, а там по структуре кода можно определить, чем это было ранее (я прав?).
скорее дизассемблируются, а не декомпилируются.
в общем то да, можно.
+ часто компилятор сам оставляет свои метки.
Цитата:
Означает ли это, что программа декомпилированная и снова скомпилированная из полученного кода могут обладать разными свойствами (появление новых ошибок, разница во времени выполнения и т.д.)?
нет, так как вы будете компилировать тот асм-код который сгенерировал компилятор.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.04.2011, 04:46   #5
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

Сами программы после компиляции транслируются в машинный код, понятный процессору. Если точнее выглядит он приблизительно как <Номер_инструкции><аргументы>. Это код можно считать в той или иной форме, скажем в виде десятичных цифр или шестнадцатеричных цифр, или же его можно дизассемблировать, транслировав все номера команд и их операнды, в ассемблерные мнемоники, реже есть возможность декомпилировать в нечто компилируемое, чаще всего декомпиляция дает очень сумбурный код, который может еще и оказаться некомпилируемым.

Кроме того если программа защищена, она скорее всего имеет некую защиту от декомпиляции/дизассемблирования, выражается это в виде неких довойных инструкций или сумбурного расположения данных, которое часто приводит к некорректному дизассемблированию.

Цитата:
Означает ли это, что программа декомпилированная и снова скомпилированная из полученного кода могут обладать разными свойствами (появление новых ошибок, разница во времени выполнения и т.д.)?
Декомпиляция вообще редко дает компилируемый исходник.

Цитата:
А можно подробнее, что это за признаки (или что об этом можно почитать)?
Насколько я понял, из данной фразы, все программы декомпилируются в ассемблер, а там по структуре кода можно определить, чем это было ранее (я прав?).
Подробнее это могут описать на том же wasm.ru, я этих признаков не знаю, но слышал что они существуют. Но вообще более менее это можно определить по самому коду и секции импорта. Так, скажем, то что изначально написано на ассемблере, будет иметь довольно понятный вид для ассемблерщика, так как писал все же человек, а не машина, с другой стороны если в секции импорта обнаружится VCL-библиотеки - скорее всего это Delphi или C++ Builder, обнаружится MFC - Visual C++, QT-библиотеки вполне вероятно будут говорить о том что это писалось все же на С++, так как это, на мой взгляд, наиболее используемый с Qt язык. Но все это сугубо из разряда догадок, помимо того есть еще и бинарные штампы оставляемые различными компиляторами, вот о них я ничего не знаю, помимо того что они вероятно существуют. Сам я их не видел, но на форуме по-моему кто-то о них упоминал.
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 07.04.2011 в 04:52.
Ivan_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
компиляция и декомпиляция Greynvi4 Общие вопросы C/C++ 4 31.08.2009 20:02
Помогите в изучении!! Mixaill Общие вопросы C/C++ 14 22.05.2009 19:49
Помогите в изучении БД Access -HunteR- БД в Delphi 25 07.04.2009 02:03
Помощь в изучении C++ antoha.by Помощь студентам 4 30.01.2009 17:24
Декомпиляция benjaminfran Помощь студентам 5 15.02.2008 11:43