在不使用idaapi.require(module)的情况下,每次更新插件代码,ida都要大退重启,才能生效,这时候就需要idaapi.require。
ex:
idaapi.require('view')
idaapi.require('view.logsaver_view')
注意:既然用了idaapi.require 就不要使用import功能了,不然代码依然不会实时更新。
快速定位某个函数
这里举个例子,比如我们要快速定位到init_array函数。
def goInitarray(self):
# _get_modules是idc提供的接口,如其名
for module in idc._get_modules():
# 遍历所有module,找到linker
module_name = module.name
if 'linker' in module_name:
print 'linker address is ' + str(hex(module.base + 0x2464))
# 0x2464是Android某个版本的init_array的偏移地址,
# jumpto可以直接跳转到目标地址
idc.jumpto(module.base + 0x2464)
# 在init_array上下个断点
idc.add_bpt(module.base + 0x2464, 1)
# makecode更不用说了,相当于C
idaapi.auto_make_code(module.base + 0x2464)
通过上面的代码就可以直接定位到init_array了,真滴是又简单,又方便。
我在这里可能至少能剩下1-2分钟的时间/每次调试,而且这里只是举例init_array, 我们也可以这样去调试我们要调试的函数。