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

Discussion in 'WASM.BEGINNERS' started by Shooshpanchik, Aug 9, 2009.

  1. Shooshpanchik

    Shooshpanchik Member

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

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

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

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

    Shooshpanchik Member

    Blog Posts:
    0
    ой, забыл
    6. переходим к п.№1
     
  3. reversecode

    reversecode Guest

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

    Shooshpanchik Member

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

    JCronuz New Member

    Blog Posts:
    0
    Ида очень гибкая-управляемая - куча настроек, о которых можешь не подозревать.
     
  6. Shooshpanchik

    Shooshpanchik Member

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