Приветствую, Дизассемблирую функцию в библиотеке. Соответственно начало знаю, а вот с концом проблема. Не подскажите как отловить момент, когда дошли до конца нужной функции и началась уже след. функция?
это тривиальный пример. на самом деле обламается на первом же свитче: jmp [base_address + eax * 4], когда в eax лежит case-code.
n0name Подобные выражения разрывают граф. Это тоже самое что ветвление не на начало инструкции. Повторяю что в статике анализ невозможен, либо затруднителен. Врятле у ТС подобная задача.
n0name Так а зачем описывать то, что не может быть обработано, или вы тоже в холиварщики записались =)
просто описываю подводные камни. парень воодушевится, а окажется что для его функций решение не подходит.
GoldFinch Но Int 3 в осевом коде обработать можно, это процедура типо DbgBreakPoint(). Для сказанного n0name можно фиксапы заюзать. Никаких проблем. Это если нормальный код.
Первую инструкцию со старта машины - и аж до выключения можно назвать функцией. На асм-писаном функции могут как таковы(см. фасм сорсе) отсутствовать. ЯВУ свойственна стандартность. Важен почерк автора. Не каждый CALL - вызов функции. Может быть RET пару штук, какой выбрать? Бывает за последним RET куча одинаковости - может то выравнивание и в нас конец. Имейте ввиду не/линейность кода. Включите трассирование, походите по f7(olly) или ctrl+f9(olly), скажите, за кем смотрите. Руками хотите или программно?
спасибо за ответы. уточню вопрос. Диссамблирую функцию из допустим kernel32.dll, надо узнать её длину, сразу за ней идёт допустим какаето недокументированная функция. Пока только одна мысль, доходит до ret, записывать данную позицию как конец, а потом анализировать последующие переходы.