Декомпиляторы

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Декомпиляторы

Непрочитанное сообщение Olej » 19 дек 2012, 03:09

Достаточно любопытная заметка: Декомпиляторы, или Что делать, если нужно восстановить исходники из бинарников?
Интересна она не столько даже описанными инструментами и достижениями ;-) , сколько тем, что из неё становится очень даже хорошо понятно насколько сложная эта проблема (и не решаемая в общем виде).

alex65su
Писатель
Сообщения: 40
Зарегистрирован: 13 дек 2012, 10:27
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение alex65su » 19 дек 2012, 19:05

Когда-то (еще во времена DOS) довелось весьма интенсивно (и результативно) пользоваться дизассемблером Sourcer от "V Communications".

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение Olej » 19 дек 2012, 20:03

alex65su писал(а):Когда-то (еще во времена DOS) довелось весьма интенсивно (и результативно) пользоваться дизассемблером Sourcer от "V Communications".

По своему опыту этих изысканий могу сказать, что дизассемблирование машинного кода в код ассемблера - это... то еще "развлечение". Даже для получения вменяемого кода ассемблера требуется учитывать массу нюансов (на вскидку: правила вызова подпрограмм, параметры оптимизации, особенности генерации кода и распределения памяти конкретным компилятором...).
Я тоже повозился с дизассемблированием в своё время ... особенно под OS QNX.
И даже в этих элементарных случаях (ассемблер, а не язык высокого уровня) это очень проблематичное занятие.

alex65su
Писатель
Сообщения: 40
Зарегистрирован: 13 дек 2012, 10:27
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение alex65su » 19 дек 2012, 20:27

Olej писал(а): И даже в этих элементарных случаях (ассемблер, а не язык высокого уровня) это очень проблематичное занятие.
О том и речь!

alex65su
Писатель
Сообщения: 40
Зарегистрирован: 13 дек 2012, 10:27
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение alex65su » 20 дек 2012, 16:22

Кстати, вспомнилось...

В LINUX (и не только), утилита objdump из пакета binutils способна генерировать дампы дизассемблирования, при использовании опций -d (--disassemble) и -D.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение Olej » 20 дек 2012, 16:34

alex65su писал(а):Кстати, вспомнилось...

В LINUX (и не только), утилита objdump из пакета binutils способна генерировать дампы дизассемблирования, при использовании опций -d (--disassemble) и -D.
Это, в общем то, известно (думаю многим), но только это годится только для восстановления простейших кодов, например:
- инициализация процесса "С" и его завершения, exit (что может радикально отличаться в разных ОС)...
- или изучения того, как оптимизирует GCC вызов функций и передачу параметров при опциях -O2, -O3, ...

Для воссоздания и анализа кода это всё не годится.

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

Для чего я вообще обратил внимание на эту тему? : Не обольщайтесь. :lol: ... и не сильно слушайте чьи-то рассказки.

alex65su
Писатель
Сообщения: 40
Зарегистрирован: 13 дек 2012, 10:27
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение alex65su » 20 дек 2012, 17:14

Olej писал(а):
alex65su писал(а):Кстати, вспомнилось...

В LINUX (и не только), утилита objdump из пакета binutils способна генерировать дампы дизассемблирования, при использовании опций -d (--disassemble) и -D.
Это, в общем то, известно (думаю многим), но только это годится только для восстановления простейших кодов, например:
- инициализация процесса "С" и его завершения, exit (что может радикально отличаться в разных ОС)...
- или изучения того, как оптимизирует GCC вызов функций и передачу параметров при опциях -O2, -O3, ...

Для воссоздания и анализа кода это всё не годится.
Вообще, я objdump и binutils упомянул для полноты картины, а не как рекомедацию для... ;)
Olej писал(а): Для чего я вообще обратил внимание на эту тему? : Не обольщайтесь. :lol: ... и не сильно слушайте чьи-то рассказки.
Зато для написания разного рода диссертаций - эта тема бездонна! :-)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Декомпиляторы

Непрочитанное сообщение Olej » 20 дек 2012, 17:19

alex65su писал(а):Зато для написания разного рода диссертаций - эта тема бездонна! :-)
В принципе, да ... Так же, как, скажем, автоматическая верификация кода :lol:

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей