Логика работы интерактивного дизассемблера

Тема в разделе "WASM.BEGINNERS", создана пользователем Shooshpanchik, 9 авг 2009.

  1. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    117
    Сколько раз видел как ИДА неправильно определяет конец у процедур/функций. Используя при этом какие то странные алгоритмы, трассирует стэк. Счас затестил свой алгоритм, вроде все работает.
    Для начала получаем адрес функции (либо это точка входа, либо вызов другого call ) и заносим его в очередь инструкций. Это и есть начало фунции.

    Алгоритм дизасма функции:
    1. Извлекаем из очереди инструкций адрес, дизасмим.
    2. Если это call, заносим адрес в очередь функций.
    3. Если это условный переход, заним адрес перехода в очередь инструкций.
    4. Если это не безусловный переход заносим последующий адрес в очередь инструкций.
    5. Если очередь инструкций пуста выходим.
    За конец функции считаем самый дальний адрес в очереди инструкций.

    Все отлично работает кроме функций переходников состоящих только из безусловного перехода. И конструкций вида:
    call som_addr;
    jmp ops
    call [ebx+4]
    ops:
    (редко но встречается)

    В чем еще могут быть недостатки алгоритма ? Или мож ну других процах могут быть заморочки ?
     
  2. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    117
    ой, забыл
    6. переходим к п.№1
     
  3. reversecode

    reversecode Guest

    Публикаций:
    0
    ильфаку напиши) пусть пофиксит
    хотя лучше наверное начни писать свой опенсорус дизасм)
     
  4. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    117
    Да, я уже и СДК выкачал, и даже иду немного пореверсил. Переписать иду будет сложно, но вот написать плагин разбирающий проги так будет реально. Там есть процедурки позволяющие на это воздействовать. Пока ищю недостатки. Ведь не зря Ильфак не пошел по этому пути.
     
  5. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Ида очень гибкая-управляемая - куча настроек, о которых можешь не подозревать.
     
  6. Shooshpanchik

    Shooshpanchik Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    117
    Ее огромный плюс - инерактивность. Фсе можно пофиксить движением мышки. И как задать диапазон функции я знаю. И как поставить галочку чтоб не дизасмить после jmp, тож знаю. Интересует работоспособность алгоритма. Я спецом не давал командам названия, интересно будет ли он живуч на других процессорах (Ида то не только х86 могет дизасмить). И мож есть другие ситуации когда он не справиться. (Не процедурное программирование на асме не интересует)