IMF-apifuzz.py

2018-04-23  本文已影响0人  Dosi_X

一个类和一个函数

class ApiFuzz:
    def __init__(self):
        self.apis = {}
        self.apisets = {}
        self.apis = basic.load_apis()

    def load_apilog(self, log_fname, limit):#调用了log.py
        以rb方式打开log_fname:
            把数据以'\n'分开,把数据的第一个到倒数第二个存到data中
        如果data的长度不是偶数:
            丢掉最后一个元素
        idx = 0
        apilogs = []
        while idx < len(data) and idx < limit * 2:
            如果data[idx]的前两位是'IN':
                il = utils.evaluate(data[idx][2:])
            否则:utils.error('load_apilog: parse IN error')
            如果data[idx+1]的前三位是'OUT':
                ol = utils.evaluate(data[idx+1][3:])
            否则:utils.error(''load_apilog: parse OUT error)
            apilog = log.ApiLog(self.apis[il[0]], il, ol)
            apilogs.append(apilog)
            idx+=2
      return apilogs

    def make_model(self, fnames, limit, path, core):#调用了Model.py
        apisets = utils.multiproc(self.load_apilog_multi(limit), fnames, core)#把fnames里的log以多线程方式传给load_apilog_multi,返回列表apisets
        model = Model(apisets)
        以wb方式打开path:
            code = model.fuzz(const.CODE_HEAD, const.CODE_TAIL)
            把code写入文件

    def load_apilog_multi(self, limit):
        def func(fname):
            apiseq = self.load_apilog(fname, limit)
            返回apiseq
        返回func

函数get_limit,这个limit指的是log里的api个数吗?

def get_limit(logs):
    limit = None
    log遍历logs:
        以rb方式打开log:
        n = log以'\n'分开后的数组长度-1再除以2
        如果limit为空:
            limit = n
        如果limit不等于n:
            utils.error('Invalid triaged logs')
    返回limit

main函数

fuzz = ApiFuzz()
把命令行参数1传给log_dir
logs = []
fname遍历os.listdir(log_dir):
    把文件名存进列表logs中
limit = get_limit(logs)#不懂limit的含义
把命令行参数3传给core
fuzz.make_model(logs, limit, sys.argv[2], core)
上一篇下一篇

猜你喜欢

热点阅读