Есть две функции:
trace()
step()
Единственная проблема, эти функции ( как и go() ) нельзя вызывать в коллбеках брейкпойнтов, исключений и.т.д. Если для обработки брейкпойнта используется коллбек - нужно из него вернуть eventResult.Break или True, и в основном скрипте уже в цикле вызывать trace(). Примерно так:
trace()
step()
Единственная проблема, эти функции ( как и go() ) нельзя вызывать в коллбеках брейкпойнтов, исключений и.т.д. Если для обработки брейкпойнта используется коллбек - нужно из него вернуть eventResult.Break или True, и в основном скрипте уже в цикле вызывать trace(). Примерно так:
setBp( address ) # set breakpoint
go() # run target
while True:
step()
if disasm().instruction == 'ret'
breakВторой вариант: если функция "плоская", ее можно дизассемблировать с помощью класса disasm, найти смещение до инструкции ret и установить на нее брейкпойнт