函数名字

我们分析的过程中,会在汇编指令做个中记录日志,比如某个寄存器的值了,或者某个函数是做什么的,再或者,我们会直接更改函数的名字,方便每次查看。

这时候,为了效率,或者说能快速的复现上次调试的现场,我们就可以用这个功能,代码也非常简单。

# 通过起始地址,终止地址,以及偏移地址去保存日志
def saveDebugMessage(self):
    # create file first
    # 用个轻量级的存储shelve
    f = shelve.open(self.id)
    # 保存日志的起始地址
    addr_start = int(self.address_start, 16)
    # 保存日志的终止地址
    addr_end = int(self.address_end, 16)
    log_dict = {}
    log_dict_list = []
    for num in range(addr_start, addr_end):
        # 获取我们当前地址的日志
        com = idc.GetCommentEx(num, True)
        if com != None:
            #获取函数名
            fun_name = idc.GetFunctionName(num)
            print fun_name
            if fun_name != None and not 'sub' in fun_name:
                log_dict = {'offset': str(num - addr_start), 'msg': str(com), 'funtion_name': str(fun_name)}
            else:
                log_dict = {'offset': str(num - addr_start), 'msg': str(com)}
            log_dict_list.append(log_dict)
            pass
    print(log_dict_list)
    # 保存日志
    f['info'] = log_dict_list
    f.close()
 # 通过起始地址即可,会自动判断长度,并且获取偏移地址去设置日志
def loadDebugMessage(self):
    f = shelve.open(self.id)
    data = f['info']
    addr_start = int(self.address_start, 16)
    for num in range(0, len(data)):
        offset = data[num]['offset']
        msg = data[num]['msg']
        fun_name = data[num]['funtion_name']
        idc.MakeRptCmt(addr_start + int(offset), msg)
        if fun_name is not None and fun_name != '':
            idc.SetFunctionCmt(addr_start + int(offset), fun_name, False)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值