![]() |
eXeL@B —› Основной форум —› IDA: не коректное дисассемблирование функции |
Посл.ответ | Сообщение |
|
Создано: 12 июня 2007 16:44 · Поправил: dx2003 · Личное сообщение · #1 |
|
Создано: 12 июня 2007 16:55 · Личное сообщение · #2 |
|
Создано: 12 июня 2007 17:02 · Личное сообщение · #3 |
|
Создано: 12 июня 2007 17:07 · Поправил: dx2003 · Личное сообщение · #4 SLV [undefine->convert to code, всё в попап менюшке...] Я, видимо, не совсем корректно выразился... Код выделенный красным цветом уже является кодом (м-да... ) дело в том, что этот код неприкаянный. Он сам посебе, а должен быть частью функции адрес возврата из которой: 0x0073FD0A. На рисунке я специально пометил стрелочками callflow. Из-за того, что код этот сам по себе, IDA регистрирует ошибку востановления стека. Я конечно могу поправить стек вручную.... но хочется всёже как-то поправить сам код (саму функцию) ![]() |
|
Создано: 12 июня 2007 17:09 · Поправил: dx2003 · Личное сообщение · #5 S_T_A_S_ Да, как вариант, стек можно поправить вручную... Но таких участков кода много (спасибо разработчикам Армадилы) и ошибки со стеком это мелкая неприятность. Хуже, что такие участки мешают понять логику кода. У функции sub_40483C или у следующих по вызову подобные же проблемы... В том или ином месте повляется участок, маскирующий востановление стека. Найти это место не вопрос, вопрос как этот найденный кусок запихнуть в функцию.. ![]() |
|
Создано: 12 июня 2007 17:42 · Личное сообщение · #6 |
|
Создано: 12 июня 2007 17:42 · Личное сообщение · #7 |
|
Создано: 12 июня 2007 17:46 · Поправил: dx2003 · Личное сообщение · #8 |
|
Создано: 12 июня 2007 18:32 · Поправил: s0larian · Личное сообщение · #9 dx2003, красная метка это не код, а логическая граница функции, как её понимает IDA. Строгого понятия функция в x86 нет, т.к. есть инструкция "call" показывающая на код, и потом идёт поток инструкций до "ret". IDA пытается найти этот поток и обернуть его в своё собственное понятие "function". Alt-P покажет тебе что именно она нашла для конкректной ф-ции. Теперь по поводу метки - IDA неправильно сосчитала сколько данных идёт на стек и сколько снимается. Если тебя это беспокоит, пройдись по всему дереву вызовов от этой ф-ции вниз и проверь/поставь количесво байт которое получает каждая из них. Опять таки, IDA пытается это всё считать сама и ошибается. ![]() |
|
Создано: 12 июня 2007 19:03 · Поправил: dx2003 · Личное сообщение · #10 Вот что меня всегда поражает в некоторых людях, так это полное не желание отвечать на поставленный вопрос да ещё и при этом направлять на спрашивающего свой поток сознания... Вот я справишаю, как помочь IDA'е с определением функции. Мне отвечают: а) ты шо тупой? без этого не разберёшся? я вот, например, разобрался! б) а вы знаете, молодой человек, что в x86 нет функций .... они конечно есть в IDA... Правда, знаети ли, IDA может ошибаться с их определением b) ... Или вот я пишу: Да, как вариант, стек можно поправить вручную... мне отвечают: а) друг, пройдись по коду и замени стек ВРУЧНУЮ! б) ... Мне не сложно, я спрошу ещё раз: Подскажите, что нужно подсказать IDA'е, чтобы она верно собрала функцию? Для сомневаюшихся в вопросе уточню сразу: функцию в понимании IDA. PS Если то, что я прошу сделать просто не возможно, то не совсем понятно, почему так прямо и не сказать? +) ![]() |
|
Создано: 12 июня 2007 19:18 · Личное сообщение · #11 |
|
Создано: 12 июня 2007 19:25 · Личное сообщение · #12 |
|
Создано: 12 июня 2007 19:26 · Личное сообщение · #13 |
|
Создано: 12 июня 2007 19:31 · Личное сообщение · #14 |
|
Создано: 12 июня 2007 19:33 · Личное сообщение · #15 |
|
Создано: 12 июня 2007 19:34 · Поправил: AlexVel · Личное сообщение · #16 Блин, да это просто конструкция Try...finally Что сделать: встаешь на строку 73FD0B и жмешь "u" (undefined) Затем там же жмешь "c" (Make Code) встаешь на строку 73FD1A и жмешь "e" (end of function) и еще встаешь на 73АВ28 жмешь "A" (Make ANSI String) Т.к. там дельфовые строки-константы Тоже самое с 73FD3C и 73FD54 ![]() |
|
Создано: 12 июня 2007 19:34 · Личное сообщение · #17 |
|
Создано: 12 июня 2007 19:36 · Поправил: s0larian · Личное сообщение · #18 |
|
Создано: 12 июня 2007 19:39 · Поправил: dx2003 · Личное сообщение · #19 |
|
Создано: 12 июня 2007 19:43 · Личное сообщение · #20 |
|
Создано: 12 июня 2007 21:28 · Личное сообщение · #21 dx2003 Читай Касперски "Образ мышления -дизассемблер ИДА", и не задавай глупых вопросов. Не умеешь ты читать код это раз, второе - рипать ты тоже не умеешь и в третих ты очень хуево умеешь работать с идой, а стало быть выход один - RTFM. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... ![]() |
|
Создано: 13 июня 2007 05:28 · Личное сообщение · #22 |
|
Создано: 13 июня 2007 09:14 · Личное сообщение · #23 |
|
Создано: 13 июня 2007 16:18 · Личное сообщение · #24 |
![]() |
eXeL@B —› Основной форум —› IDA: не коректное дисассемблирование функции |
Эта тема закрыта. Ответы больше не принимаются. |