как сделать трасировку функции

Jun 21, 2014 at 5:42 PM
Edited Jun 21, 2014 at 5:44 PM
Допустим установили брекпоинт setBp на функцию.
Как теперь после срабатывания брекпоинта сделать трассировку функции до команды ret ?
П.С Во вложенные функции входить не нужно (типа trace over)

Единственный вариант вижу каждый раз делать setBp на новую инструкцию, есть вариант получше ?

Можно ли в обработчике брейкпоинта возвести флаг TF ?
Jun 25, 2014 at 6:28 AM
Есть две функции:
trace()
step()

Единственная проблема, эти функции ( как и go() ) нельзя вызывать в коллбеках брейкпойнтов, исключений и.т.д. Если для обработки брейкпойнта используется коллбек - нужно из него вернуть eventResult.Break или True, и в основном скрипте уже в цикле вызывать trace(). Примерно так:
setBp( address )  # set breakpoint

go() # run target

while True:
    step()
    if disasm().instruction == 'ret'
        break
Второй вариант: если функция "плоская", ее можно дизассемблировать с помощью класса disasm, найти смещение до инструкции ret и установить на нее брейкпойнт