Сейчас на форуме: asfa, bartolomeo, _MBK_ (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› IDA, привести листинг в порядок |
Посл.ответ | Сообщение |
|
Создано: 09 марта 2012 03:32 · Поправил: Модератор · Личное сообщение · #1 IDA не корректно показывает ассемблерный код функции. Code:
Во первых, есть какие-то переменные с очень большим смещением (var_76AF33BB= dword ptr -76AF33BBh), поиск ссылок на них по клавише X не дает результатов. Из-за этого плагин HexRays не может сгенерировать код, пишет очень большой стек. Во вторых не видит аргументов функции. Пишет что есть аргуметы dword ptr 0Ch и 14h, но поиск ссылок по ним ничего не показывает. А первый аргумент, к которому явно обращаются (mov ecx, [ebp+8]) не показывает, вот стек аргументов, почему-то на r он отвел 8 байт Code:
Соответственно, вопрос, как привести размер стека в соответствующий вид, и как добавить первый аргумент? ![]() |
|
Создано: 09 марта 2012 11:58 · Поправил: Hexxx · Личное сообщение · #2 проще пересоздать функцию. 'U', а потом 'P'. А бороться с вот таким локальными переменными, только если оно продолжает создавать такую же хрень. Если таки продолжает, то ALT-P на функции. И редактируем размер локальных переменных. На mov ecx, [ebp+8] нажмите 'K', и аргумент создастся. Но честно говоря не факт что это аргумент, и что у функции 3 аргумента вообще. Есть столько всяких исключений из правил, что я бы не рисковал не разобравшись. А без контекста (т.е. примеров на асме), говорить не о чем. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 09 марта 2012 16:35 · Личное сообщение · #3 |
|
Создано: 10 марта 2012 07:13 · Личное сообщение · #4 |
|
Создано: 13 марта 2012 02:40 · Личное сообщение · #5 Code:
вот где проблема и начинать нужно не с показа стека а с показа начала кода всего кода там в иде есть глючек когда она не может коректно стек поставить но рассуждать о нём пока не вижу смысла кроме показать функцию, вы еще с Alt+K для выравнивания стека пока не пользовались да кстати а уверены что программа писана на С/C++ ? ![]() |
|
Создано: 21 марта 2012 16:36 · Личное сообщение · #6 |
|
Создано: 22 марта 2012 18:15 · Поправил: Veliant · Личное сообщение · #7 Цитирую код, сгенерированный IDR. Первый цикл прогоняет все функции и удаляет их, в том числе имена. Второй цикл делает тоже самое с данными Code:
И задание имени по адресу Code:
Создание функции Code:
А вообще читайте IDA Pro book так все есть ![]() |
|
Создано: 26 марта 2012 12:22 · Личное сообщение · #8 Zarion пишет: В частности, как программно реализовать команды «Y» и «N»? Вполне элементарно! Например, мы имеем в IdaPro запись: Code:
Ей соответствует скрипт: Code:
Допустим, надо поменять тип struct tagED * на DWORD * (команда «Y») и имя переменной a1 на aEditInfo (команда «N»). Это особенно актуально, если вы хотите получить Си код данной функции с нужными изменениями (клавиша F5 для плагина Hex-Rays Decompiler). Тогда вы просто запускаете скрипт: Code:
Последнюю точку с запятой для одиночной команды скрипта писать не обязательно (при этом становятся видны промежуточные сообщения «Иды»). ![]() |
![]() |
eXeL@B —› Вопросы новичков —› IDA, привести листинг в порядок |