IDA脚本笔记(一)

来源:互联网 发布:如何编译java程序 编辑:程序博客网 时间:2024/05/29 15:16

获取当前光标所指向的地址

idaapi.here()
idc.get_screen_ea()
返回一个整型地址,为光标所在行的地址

curEA = idc.here()print("CurEA: %08X" % curEA)

通过一个地址 获得命中的函数

idc.GetFunctionAttr(EA, idc.FUNCATTR_START)
idc.GetFunctionAttr(EA, idc.FUNCATTR_END)
分别得到IDA自动分析得到的函数头和函数尾部的地址

dwFunStart = idc.GetFunctionAttr(curEA, idc.FUNCATTR_START)dwFunEnd = idc.GetFunctionAttr(curEA, idc.FUNCATTR_END)

通过一个地址,得到一个函数对象

idaapi.get_func(EA)
通过一个地址,得到一个函数对象,对象类型(idaapi.func_t)

curFun = idaapi.get_func(dwFunStart)if curFun is not None:    dwFunStart = curFun.start_ea    dwFunEnd = curFun.end_ea    print("GetFunSucess\r\nFunStart: %08X\r\nFunEnd: %08X" % (dwFunStart, dwFunEnd))else:    print ("GetFunError")

通过一个地址,得到一个函数中,所有行的地址

idautils.FuncItems(EA)
传入一个函数的开始地址,然后返回一个生成器
每次调用生成器,返回一条指令地址

lstFunAddr = list(idautils.FuncItems(dwFunStart))

lstFunAddr = list(idautils.FuncItems(dwFunStart))print ("ShowLst:")for i in lstFunAddr:    print ('Addr: %08X' % i)

通过一个地址,获得当前行的注释

idaapi.get_cmt(EA, flag)
参数1,地址;参数2,是否获取重复,返回一个注释字符串

cmt = idaapi.get_cmt(addr, 0)print(cmt)

给地址设置名称

idc.MakeNameEx(ea, name, flags)

地址, 名称字符串, 什么类型的名称

idc.set_name(0x004086B9, "Test1", idc.SN_NOWARN)

原创粉丝点击