コード例 #1
0
    def parse_declaration(declaration):
        m = re.search(r"^(\w+[ *]+)(\w+)(\[(\d+)\])?$", declaration)
        if m is None:
            logger.error(
                "Member declaration should be like `TYPE_NAME NAME[SIZE]` (Array is optional)"
            )
            return

        type_name, field_name, _, arr_size = m.groups()
        if field_name[0].isdigit():
            logger.error("Bad field name")
            return

        result = idc.ParseType(type_name, 0)
        if result is None:
            logger.error(
                "Failed to parse member type. It should be like `TYPE_NAME NAME[SIZE]` (Array is optional)"
            )
            return

        _, tp, fld = result
        tinfo = idaapi.tinfo_t()
        tinfo.deserialize(idaapi.cvar.idati, tp, fld, None)
        if arr_size:
            assert tinfo.create_array(tinfo, int(arr_size))
        return tinfo, field_name
コード例 #2
0
def size(str):
    '''returns the size of a c declaration'''
    if not str.endswith(';'):
        str = str + ';'
    result = idc.ParseType(str, 0)
    if result is None:
        raise TypeError('Unable to parse C declaration %s' % repr(str))
    _, type, _ = result
    return idc.SizeOf(type)
コード例 #3
0
 def activate(self):
     new_type_declaration = idaapi.askstr(0x100, self.type_name,
                                          "Enter type:")
     result = idc.ParseType(new_type_declaration, 0)
     if result is None:
         return
     _, tp, fld = result
     tinfo = idaapi.tinfo_t()
     tinfo.deserialize(idaapi.cvar.idati, tp, fld, None)
     self.tinfo = tinfo
     self.is_array = False
コード例 #4
0
ファイル: Actions.py プロジェクト: ydc1992/HexRaysPyTools
    def __parse_declaration(declaration):
        m = re.search(r"^(\w+[ *]+)(\w+)$", declaration)
        if m is None:
            return

        type_name, field_name = m.groups()
        if field_name[0].isdigit():
            print "[ERROR] Bad field name"
            return

        result = idc.ParseType(type_name, 0)
        if result is None:
            return

        _, tp, fld = result
        tinfo = idaapi.tinfo_t()
        tinfo.deserialize(idaapi.cvar.idati, tp, fld, None)
        return tinfo, field_name