Сейчас на форуме: (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Декомпиляция (Основополагающие принципы)
Посл.ответ Сообщение

Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 29 марта 2014 00:17
· Личное сообщение · #1

Решил запилить свой декомпиллер байт кода .
Для простоты понимания (та и не шибко заморачиваться с самим дизассемблером) цель выбрал MapBasic
Код компиляется в байткод виртуальной машины .
Ушло 2 недели на разбор байткода и написание дизассемблера ( вероятно не все инструкции разобраны , ибо довольно мощные высокоуровневые инструкции свернуты в одну инструкцию байткода )

далее размышления привели к такому алгоритму :

1. Выделяем все загрузки переменных/констант в стек
2. Выделяем вызываемые функции использующие переменные из стека
3. Выделяем математические инструкции ...
4. ... логические

но вопрос как свернуть логические "cmp -> jmp" в "if - else if - if " или в "case" ?

Суть вопроса в том что каков алго декомпиляции (приведения асм кода к высокому уровню) ?




Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 29 марта 2014 00:26 · Поправил: plutos
· Личное сообщение · #2

http://www.backerstreet.com/decompiler/control_flow_graph.php

http://web.ist.utl.pt/pedrodaniel/tese/artigos/A%20Structuring%20Algorithm%20for%20Decompilation.pdf

-----
Give me a HANDLE and I will move the Earth.


| Сообщение посчитали полезным: kid

Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 29 марта 2014 09:03 · Поправил: Veliant
· Личное сообщение · #3

http://zyloid.com/recomposer/files/decompilation_thesis.pdf

cmp в case врядли свернешь.. даже хексрей еще не научился. Case разве что табличный сворачивается

| Сообщение посчитали полезным: kid


Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 29 марта 2014 10:28
· Личное сообщение · #4

graywolf или как его там, красиво сворачивает условия, сам не ожидал от такой поделки. с автором попробуй связаться. ну, и GPCH как бы мутит в vb-decompiler

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 58.3 (постоянный), 50thx
Активность: 0.040.08
Статус: Участник

Создано: 29 марта 2014 10:43 · Поправил: DrVB_5_6
· Личное сообщение · #5

kid пишет:
Суть вопроса в том что каков алго декомпиляции (приведения асм кода к высокому уровню) ?


Ты бы примерчик кода выложил где-нибудь, абстрактно и универсально проблема тяжеловато решается!
Для байт-кода всё может быть попроще, чем, к примеру, в диссертации Кристины.
А результатов корректных даже для VBasic в паблике нет! Только в привате.

ajax пишет:
graywolf или как его там, красиво сворачивает условия, сам не ожидал от такой поделки


Не подскажешь, где живёт это чудо, а то как-то не попадалось!

ajax
Для Net и для pcode VBasic задача должна быть полностью разрешима (предполагаю так из опыта работы с VBasic),
по крайней мере для VB я её решил практически полностью. Но там используются дополнительная информация о структуре формируемых выражений компилятором.
Насколько я представляю себе Net, там так же должно прокатить.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 29 марта 2014 10:50
· Личное сообщение · #6

DrVB_5_6
http://www.digitalbodyguard.com/graywolf.html

-----
От многой мудрости много скорби, и умножающий знание умножает печаль


| Сообщение посчитали полезным: DrVB_5_6, kid


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 29 марта 2014 12:17
· Личное сообщение · #7

kid
В сети полно опенсорсных декомпилей, разбирающих (чистый) байткод. Видел как минимум для флэша, дотнета и явы.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 42.2 (посетитель), 42thx
Активность: 0.040
Статус: Участник

Создано: 29 марта 2014 18:55 · Поправил: Модератор
· Личное сообщение · #8

Всем спасибо за инфо .
Буду курить .

4kusNick пишет:
kid
В сети полно опенсорсных декомпилей, разбирающих (чистый) байткод. Видел как минимум для флэша, дотнета и явы.


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

От модератора: Пользуйся кнопкой "Правка", не создавай сообщения подряд.


 eXeL@B —› Вопросы новичков —› Декомпиляция (Основополагающие принципы)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати