Сейчас на форуме: (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Декомпиляция (Основополагающие принципы) |
Посл.ответ | Сообщение |
|
Создано: 29 марта 2014 00:17 · Личное сообщение · #1 Решил запилить свой декомпиллер байт кода . Для простоты понимания (та и не шибко заморачиваться с самим дизассемблером) цель выбрал MapBasic Код компиляется в байткод виртуальной машины . Ушло 2 недели на разбор байткода и написание дизассемблера ( вероятно не все инструкции разобраны , ибо довольно мощные высокоуровневые инструкции свернуты в одну инструкцию байткода ) далее размышления привели к такому алгоритму : 1. Выделяем все загрузки переменных/констант в стек 2. Выделяем вызываемые функции использующие переменные из стека 3. Выделяем математические инструкции ... 4. ... логические но вопрос как свернуть логические "cmp -> jmp" в "if - else if - if " или в "case" ? Суть вопроса в том что каков алго декомпиляции (приведения асм кода к высокому уровню) ? ![]() |
|
Создано: 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. ![]() |
|
Создано: 29 марта 2014 09:03 · Поправил: Veliant · Личное сообщение · #3 http://zyloid.com/recomposer/files/decompilation_thesis.pdf cmp в case врядли свернешь.. даже хексрей еще не научился. Case разве что табличный сворачивается ![]() |
|
Создано: 29 марта 2014 10:28 · Личное сообщение · #4 |
|
Создано: 29 марта 2014 10:43 · Поправил: DrVB_5_6 · Личное сообщение · #5 kid пишет: Суть вопроса в том что каков алго декомпиляции (приведения асм кода к высокому уровню) ? Ты бы примерчик кода выложил где-нибудь, абстрактно и универсально проблема тяжеловато решается! Для байт-кода всё может быть попроще, чем, к примеру, в диссертации Кристины. А результатов корректных даже для VBasic в паблике нет! Только в привате. ajax пишет: graywolf или как его там, красиво сворачивает условия, сам не ожидал от такой поделки Не подскажешь, где живёт это чудо, а то как-то не попадалось! ajax Для Net и для pcode VBasic задача должна быть полностью разрешима (предполагаю так из опыта работы с VBasic), по крайней мере для VB я её решил практически полностью. Но там используются дополнительная информация о структуре формируемых выражений компилятором. Насколько я представляю себе Net, там так же должно прокатить. ![]() |
|
Создано: 29 марта 2014 10:50 · Личное сообщение · #6 |
|
Создано: 29 марта 2014 12:17 · Личное сообщение · #7 |
|
Создано: 29 марта 2014 18:55 · Поправил: Модератор · Личное сообщение · #8 Всем спасибо за инфо . Буду курить . 4kusNick пишет: kid В сети полно опенсорсных декомпилей, разбирающих (чистый) байткод. Видел как минимум для флэша, дотнета и явы. Это да , но это еще убить время что бы вкурить что там накодили , а тут вполне вменяемая литература была показана , еще раз спасибо за нее . От модератора: Пользуйся кнопкой "Правка", не создавай сообщения подряд. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Декомпиляция (Основополагающие принципы) |