eXeL@B —› Основной форум —› [IDA] как найти все базовые блоки? |
Посл.ответ | Сообщение |
|
Создано: 16 декабря 2010 12:31 · Поправил: GoldFinch · Личное сообщение · #1 Надо наиболее надежным способом найти все базовые блоки (basic blocks). (Базовый блок соответствует одному прямоугольнику графа функции) Подойдут решения использующие IDC или IDAPython или плагин к IDA. Версия IDA - 5.5 Есть пример такого кода в исходниках Я набросал IDC скрипт, который считает началом базового блока начало функции или инструкцию на которую есть ссылки, но не уверен что лучшее решение. Code:
| Сообщение посчитали полезным: svladim |
|
Создано: 16 декабря 2010 12:54 · Личное сообщение · #2 IDA это делает очень криво, могу дать пару примеров, когда ида не находит все базовые блоки. Решение тут только одно - писать свой софт. Лучше в виде плагина для той же IDA. Наработки у меня есть (ага, как всегда), но времени нет. | Сообщение посчитали полезным: Hexxx |
|
Создано: 16 декабря 2010 14:06 · Личное сообщение · #3 |
|
Создано: 16 декабря 2010 14:58 · Поправил: ciam · Личное сообщение · #4 лучший вариант - это самому строить CFG граф, т.к. потом будете иметь возможность его упрощать (что важно при анализе современных протекторов/малваре). у меня довольно неплохо работал такой алгоритм: - базовые блоки добавляются при нахождении ветвления (ну естественно ) - если ветвление идёт в уже существующий блок, то этот блок делится на 2 блока - чуть сложнее с определением switch tables. нужно анализировать код - иногда без деобфускации кода, правильный граф просто нельзя построить - последний этап - можно убрать незначимые узлы |
|
Создано: 17 декабря 2010 02:40 · Личное сообщение · #5 |
|
Создано: 19 декабря 2010 18:48 · Поправил: Clerk · Личное сообщение · #6 |
eXeL@B —› Основной форум —› [IDA] как найти все базовые блоки? |