def blocks(start, end):
'''Returns each block between the addresses ``start`` and ``end``.'''
block, _ = start, end = interface.address.head(start), address.tail(end)+1
for ea in iterate(start, end):
nextea = address.next(ea)
if _instruction.is_call(ea):
continue
if _instruction.is_return(ea):
yield block,nextea
block = ea
elif cxdown(ea):
yield block,nextea
block = nextea
elif cxup(ea) and block != ea:
yield block,ea
block = ea
continue
return
# FIXME: The idaapi.is_basic_block_end api has got to be faster than doing it
# with ida's xrefs in python..
评论列表
文章目录