def is_import_or_lib_func(ea):
"""
Is ea part of an imported function or a known library?
@param ea: any ea within the function scope
@return: True if function is either imported or a known library function.
"""
return Functions(ea).flags & (idaapi.FUNC_LIB | idaapi.FUNC_THUNK)
python类FUNC_LIB的实例源码
def is_library(cls, func):
'''Return True if the function ``func`` is considered a library function.'''
fn = by(func)
return fn.flags & idaapi.FUNC_LIB == idaapi.FUNC_LIB
def is_library(cls, func):
'''Return True if the function ``func`` is considered a library function.'''
fn = by(func)
return fn.flags & idaapi.FUNC_LIB == idaapi.FUNC_LIB
def is_library(cls, func):
'''Return True if the function ``func`` is considered a library function.'''
fn = by(func)
return fn.flags & idaapi.FUNC_LIB == idaapi.FUNC_LIB
def is_library(cls, func):
'''Return True if the function ``func`` is considered a library function.'''
fn = by(func)
return fn.flags & idaapi.FUNC_LIB == idaapi.FUNC_LIB
def is_library(cls, func):
'''Return True if the function ``func`` is considered a library function.'''
fn = by(func)
return fn.flags & idaapi.FUNC_LIB == idaapi.FUNC_LIB
def is_library(cls, func):
'''Return True if the function ``func`` is considered a library function.'''
fn = by(func)
return fn.flags & idaapi.FUNC_LIB == idaapi.FUNC_LIB
def graph_down(ea, path=set()):
"""
Recursively collect all function calls.
Copied with minor modifications from
http://hooked-on-mnemonics.blogspot.com/2012/07/renaming-subroutine-blocks-and.html
"""
path.add(ea)
#
# iterate through all the instructions in the target function (ea) and
# inspect all the call instructions
#
for x in [x for x in idautils.FuncItems(ea) if idaapi.is_call_insn(x)]:
# TODO
for r in idautils.XrefsFrom(x, idaapi.XREF_FAR):
#print "0x%08X" % h, "--calls-->", "0x%08X" % r.to
if not r.iscode:
continue
# get the function pointed at by this call
func = idaapi.get_func(r.to)
if not func:
continue
# ignore calls to imports / library calls / thunks
if (func.flags & (idaapi.FUNC_THUNK | idaapi.FUNC_LIB)) != 0:
continue
#
# if we have not traversed to the destination function that this
# call references, recurse down to it to continue our traversal
#
if r.to not in path:
graph_down(r.to, path)
return path