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

Тема в разделе "WASM.BEGINNERS", создана пользователем mz80, 13 окт 2010.

  1. mz80

    mz80 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2010
    Сообщения:
    10
    Приветствую,

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

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    в общем случае - никак
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    GPE. Сабж в теме про овощи.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    jmp eax всё поломает.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    На этой инструкции функция заканчивается. Eax линк на калбэк. Нельзя это расчитать в статике.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    это тривиальный пример. на самом деле обламается на первом же свитче:
    jmp [base_address + eax * 4], когда в eax лежит case-code.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Подобные выражения разрывают граф. Это тоже самое что ветвление не на начало инструкции. Повторяю что в статике анализ невозможен, либо затруднителен. Врятле у ТС подобная задача.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    конечно невозможен, теоретически эмулятор можно подрубить, но это из пушки по воробьям.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Так а зачем описывать то, что не может быть обработано, или вы тоже в холиварщики записались =)
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    просто описываю подводные камни.
    парень воодушевится, а окажется что для его функций решение не подходит.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    n0name
    Int 3. Управление получает мой код. Как найти размер функции.. Тоже нюанс.
     
  12. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Clerk, n0name,
    поздравляю, вы в десяти постах сформулировали и доказали то что я написал в #2
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    GoldFinch
    Но Int 3 в осевом коде обработать можно, это процедура типо DbgBreakPoint(). Для сказанного n0name можно фиксапы заюзать. Никаких проблем. Это если нормальный код.
     
  14. edemko

    edemko New Member

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

    mz80 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2010
    Сообщения:
    10
    спасибо за ответы.

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

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    mz80
    ищите сигнатуру nop / nop / mov edi, edi / push ebp / mov ebp, esp
     
  17. mz80

    mz80 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2010
    Сообщения:
    10
    GoldFinch
    Спасибо, но уже думал над этим вариантом и нашел случаи, когда это не пройдёт.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
  19. mz80

    mz80 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2010
    Сообщения:
    10
    Clerk
    Спасибо!