длинна функции в байтах

Discussion in 'WASM.BEGINNERS' started by mz80, Oct 13, 2010.

  1. mz80

    mz80 New Member

    Blog Posts:
    0
    Joined:
    Jul 21, 2010
    Messages:
    10
    Приветствую,

    Дизассемблирую функцию в библиотеке. Соответственно начало знаю, а вот с концом проблема. Не подскажите как отловить момент, когда дошли до конца нужной функции и началась уже след. функция?
     
  2. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    в общем случае - никак
     
  3. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    GPE. Сабж в теме про овощи.
     
  4. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    jmp eax всё поломает.
     
  5. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    n0name
    На этой инструкции функция заканчивается. Eax линк на калбэк. Нельзя это расчитать в статике.
     
  6. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    это тривиальный пример. на самом деле обламается на первом же свитче:
    jmp [base_address + eax * 4], когда в eax лежит case-code.
     
  7. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    n0name
    Подобные выражения разрывают граф. Это тоже самое что ветвление не на начало инструкции. Повторяю что в статике анализ невозможен, либо затруднителен. Врятле у ТС подобная задача.
     
  8. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    конечно невозможен, теоретически эмулятор можно подрубить, но это из пушки по воробьям.
     
  9. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    n0name
    Так а зачем описывать то, что не может быть обработано, или вы тоже в холиварщики записались =)
     
  10. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    просто описываю подводные камни.
    парень воодушевится, а окажется что для его функций решение не подходит.
     
  11. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    n0name
    Int 3. Управление получает мой код. Как найти размер функции.. Тоже нюанс.
     
  12. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    Clerk, n0name,
    поздравляю, вы в десяти постах сформулировали и доказали то что я написал в #2
     
  13. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    GoldFinch
    Но Int 3 в осевом коде обработать можно, это процедура типо DbgBreakPoint(). Для сказанного n0name можно фиксапы заюзать. Никаких проблем. Это если нормальный код.
     
  14. edemko

    edemko New Member

    Blog Posts:
    0
    Joined:
    Nov 25, 2009
    Messages:
    454
    Первую инструкцию со старта машины - и аж до выключения можно назвать функцией.
    На асм-писаном функции могут как таковы(см. фасм сорсе) отсутствовать.
    ЯВУ свойственна стандартность.
    Важен почерк автора.
    Не каждый CALL - вызов функции.
    Может быть RET пару штук, какой выбрать?
    Бывает за последним RET куча одинаковости - может то выравнивание и в нас конец.
    Имейте ввиду не/линейность кода.
    Включите трассирование, походите по f7(olly) или ctrl+f9(olly), скажите, за кем смотрите.
    Руками хотите или программно?
     
  15. mz80

    mz80 New Member

    Blog Posts:
    0
    Joined:
    Jul 21, 2010
    Messages:
    10
    спасибо за ответы.

    уточню вопрос. Диссамблирую функцию из допустим kernel32.dll, надо узнать её длину, сразу за ней идёт допустим какаето недокументированная функция. Пока только одна мысль, доходит до ret, записывать данную позицию как конец, а потом анализировать последующие переходы.
     
  16. GoldFinch

    GoldFinch New Member

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    mz80
    ищите сигнатуру nop / nop / mov edi, edi / push ebp / mov ebp, esp
     
  17. mz80

    mz80 New Member

    Blog Posts:
    0
    Joined:
    Jul 21, 2010
    Messages:
    10
    GoldFinch
    Спасибо, но уже думал над этим вариантом и нашел случаи, когда это не пройдёт.
     
  18. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
  19. mz80

    mz80 New Member

    Blog Posts:
    0
    Joined:
    Jul 21, 2010
    Messages:
    10
    Clerk
    Спасибо!