import idc
import idaapi
import idautils
def set_breakpoints():
ea = idc.ScreenEA()
for function_ea in idautils.Functions(idc.SegStart(ea), idc.SegEnd(ea)):
if idc.GetFunctionFlags(function_ea) & FUNC_LIB:
for ref in idautils.CodeRefsTo(function_ea, 0):
idc.AddBpt(ref)
def rem_breakpoints():
ea = idc.ScreenEA()
for function_ea in idautils.Functions(idc.SegStart(ea), idc.SegEnd(ea)):
if idc.GetFunctionFlags(function_ea) & FUNC_LIB:
for ref in idautils.CodeRefsTo(function_ea, 0):
idc.DelBpt(ref)
idaapi.add_hotkey("Alt-Z", set_breakpoints)
idaapi.add_hotkey("Alt-X", rem_breakpoints)
现在我想为导入的win api函数具有相同的功能(从“导入”选项卡),但我找不到任何表明该功能已导入的标志。也许有人可以指出我正确的方向去做。谢谢。
#1 楼
此代码段从https://github.com/idapython/src/blob/master/examples/ex_imports.py
# -----------------------------------------------------------------------
# This is an example illustrating how to enumerate imports
# (c) Hex-Rays
#
import idaapi
def imp_cb(ea, name, ord):
if not name:
print "%08x: ord#%d" % (ea, ord)
else:
print "%08x: %s (ord#%d)" % (ea, name, ord)
# True -> Continue enumeration
# False -> Stop enumeration
return True
nimps = idaapi.get_import_module_qty()
print "Found %d import(s)..." % nimps
for i in xrange(0, nimps):
name = idaapi.get_import_module_name(i)
if not name:
print "Failed to get import module name for #%d" % i
continue
print "Walking-> %s" % name
idaapi.enum_import_names(i, imp_cb)
print "All done..."
复制而来从枚举导入到设置断点的步骤很简单。
评论
请注意:.idata部分中的条目通常是指向目标功能的指针,而不是函数本身,因此在设置断点之前需要将它们取消引用。
–伊戈尔·斯科钦斯基♦
16-10-1在18:13