Здравствуйте, Философ, Вы писали:
Ф>1) Одной из самых трудных задач при реверсинге — понять, что делает функция и соответственно её назвать.
Думаю что сделают когда-нибудь, но нужен полноценный контекст, а не отдельные функции. Имя функции часто зависит от предметной области.
Ф>2) Кроме того, бывают заинлайненные функции, где вместо call'ов используются безусловные переходы. Вот было бы круто их тоже выделять в виде функций. Ф>3) Часто заинлайнейнная компилятором функция, прям без переходов, in place. Было бы круто найти в гигатоннах ассемблера похожий код и выделить его в функцию с директивой inline.
п3 = п2. Это возможно только частично. Заинлайненные функции при оптимизации могут компилироваться в изоморфы, сохраняя семантику операции. Сюда же и всякие разворачивания циклов относятся и т.п.
Зачатки подобного функционала есть в IDA. Она умеет/-ла некоторые линейные блоки определять как memset/memcpy, как минимум. Но там это реализовано без всяких ИИ.
Ф>Эти задачи возможно возложить на плечи ИИ? Он в таких делах сможет помочь?
На текущий момент — только п1, вероятно, реализуем напрямую.