zoukankan      html  css  js  c++  java
  • color xml arm相关

    #--------------------------------------------------------------------------
    #                             C O L O R S
    #--------------------------------------------------------------------------
    
    def GetColor(ea, what):
        """
        Get item color
    
        @param ea: address of the item
        @param what: type of the item (one of  CIC_* constants)
    
        @return: color code in RGB (hex 0xBBGGRR)
        """
        if what not in [ CIC_ITEM, CIC_FUNC, CIC_SEGM ]:
            raise ValueError, "'what' must be one of CIC_ITEM, CIC_FUNC and CIC_SEGM"
    
        if what == CIC_ITEM:
            return idaapi.get_item_color(ea)
    
        if what == CIC_FUNC:
            func = idaapi.get_func(ea)
            if func:
                return func.color
            else:
                return DEFCOLOR
    
        if what == CIC_SEGM:
            seg = idaapi.getseg(ea)
            if seg:
                return seg.color
            else:
                return DEFCOLOR
    
    # color item codes:
    CIC_ITEM = 1         # one instruction or data
    CIC_FUNC = 2         # function
    CIC_SEGM = 3         # segment
    
    DEFCOLOR = 0xFFFFFFFF  # Default color
    
    
    def SetColor(ea, what, color):
        """
        Set item color
    
        @param ea: address of the item
        @param what: type of the item (one of CIC_* constants)
        @param color: new color code in RGB (hex 0xBBGGRR)
    
        @return: success (True or False)
        """
        if what not in [ CIC_ITEM, CIC_FUNC, CIC_SEGM ]:
            raise ValueError, "'what' must be one of CIC_ITEM, CIC_FUNC and CIC_SEGM"
    
        if what == CIC_ITEM:
            return idaapi.set_item_color(ea, color)
    
        if what == CIC_FUNC:
            func = idaapi.get_func(ea)
            if func:
                func.color = color
                return bool(idaapi.update_func(func))
            else:
                return False
    
        if what == CIC_SEGM:
            seg = idaapi.getseg(ea)
            if seg:
                seg.color = color
                return bool(seg.update())
            else:
                return False
    
    
    #--------------------------------------------------------------------------
    #                               X M L
    #--------------------------------------------------------------------------
    
    def SetXML(path, name, value):
        """
        Set or update one or more XML values.
    
        @param path: XPath expression of elements where to create value(s)
        @param name: name of the element/attribute
                     (use @XXX for an attribute) to create.
                     If 'name' is empty, the elements or
                     attributes returned by XPath are directly
                     updated to contain the new 'value'.
        @param value: value of the element/attribute
    
        @return: success (True or False)
        """
        return idaapi.set_xml(path, name, value)
    
    
    def GetXML(path):
        """
        Get one XML value.
    
        @param path: XPath expression to an element
                     or attribute whose value is requested
    
        @return: the value, None if failed
        """
        v = idaapi.value_t()
        if idaapi.get_xml(path):
            return v.str
        else:
            return None
    
    
    #----------------------------------------------------------------------------
    #                       A R M   S P E C I F I C
    #----------------------------------------------------------------------------
    def ArmForceBLJump(ea):
        """
        Some ARM compilers in Thumb mode use BL (branch-and-link)
        instead of B (branch) for long jumps, since BL has more range.
        By default, IDA tries to determine if BL is a jump or a call.
        You can override IDA's decision using commands in Edit/Other menu
        (Force BL call/Force BL jump) or the following two functions.
    
        Force BL instruction to be a jump
    
        @param ea: address of the BL instruction
    
        @return: 1-ok, 0-failed
        """
        return Eval("ArmForceBLJump(0x%x)"%ea)
    
    
    def ArmForceBLCall(ea):
        """
        Force BL instruction to be a call
    
        @param ea: address of the BL instruction
    
        @return: 1-ok, 0-failed
        """
        return Eval("ArmForceBLCall(0x%x)"%ea)
    
    
    #--------------------------------------------------------------------------
    # Compatibility macros:
    def Compile(file):           return CompileEx(file, 1)
    def OpOffset(ea,base):       return OpOff(ea,-1,base)
    def OpNum(ea):               return OpNumber(ea,-1)
    def OpChar(ea):              return OpChr(ea,-1)
    def OpSegment(ea):           return OpSeg(ea,-1)
    def OpDec(ea):               return OpDecimal(ea,-1)
    def OpAlt1(ea, opstr):       return OpAlt(ea, 0, opstr)
    def OpAlt2(ea, opstr):       return OpAlt(ea, 1, opstr)
    def StringStp(x):            return SetCharPrm(INF_ASCII_BREAK,x)
    def LowVoids(x):             return SetLongPrm(INF_LOW_OFF,x)
    def HighVoids(x):            return SetLongPrm(INF_HIGH_OFF,x)
    def TailDepth(x):            return SetLongPrm(INF_MAXREF,x)
    def Analysis(x):             return SetCharPrm(INF_AUTO,x)
    def Tabs(x):                 return SetCharPrm(INF_ENTAB,x)
    #def Comments(x):             SetCharPrm(INF_CMTFLAG,((x) ? (SW_ALLCMT|GetCharPrm(INF_CMTFLAG)) : (~SW_ALLCMT&GetCharPrm(INF_CMTFLAG))))
    def Voids(x):                return SetCharPrm(INF_VOIDS,x)
    def XrefShow(x):             return SetCharPrm(INF_XREFNUM,x)
    def Indent(x):               return SetCharPrm(INF_INDENT,x)
    def CmtIndent(x):            return SetCharPrm(INF_COMMENT,x)
    def AutoShow(x):             return SetCharPrm(INF_SHOWAUTO,x)
    def MinEA():                 return GetLongPrm(INF_MIN_EA)
    def MaxEA():                 return GetLongPrm(INF_MAX_EA)
    def BeginEA():               return GetLongPrm(INF_BEGIN_EA)
    def set_start_cs(x):         return SetLongPrm(INF_START_CS,x)
    def set_start_ip(x):         return SetLongPrm(INF_START_IP,x)
    
    def WriteMap(filepath):
        return GenerateFile(OFILE_MAP, filepath, 0, BADADDR, GENFLG_MAPSEG|GENFLG_MAPNAME)
    
    def WriteTxt(filepath, ea1, ea2):
        return GenerateFile(OFILE_ASM, filepath, ea1, ea2, 0)
    
    def WriteExe(filepath):
        return GenerateFile(OFILE_EXE, filepath, 0, BADADDR, 0)
    
    
    UTP_STRUCT = idaapi.UTP_STRUCT
    UTP_ENUM   = idaapi.UTP_ENUM
    
    
    def BeginTypeUpdating(utp):
        """
        Begin type updating. Use this function if you
        plan to call AddEnumConst or similar type modification functions
        many times or from inside a loop
    
        @param utp: one of UTP_xxxx consts
        @return: None
        """
        return idaapi.begin_type_updating(utp)
    
    
    def EndTypeUpdating(utp):
        """
        End type updating. Refreshes the type system
        at the end of type modification operations
    
        @param utp: one of idaapi.UTP_xxxx consts
        @return: None
        """
        return idaapi.end_type_updating(utp)
    
    
    def AddConst(enum_id, name,value): return AddConstEx(enum_id, name, value, idaapi.BADADDR)
    def AddStruc(index, name):         return AddStrucEx(index,name, 0)
    def AddUnion(index, name):         return AddStrucEx(index,name, 1)
    def OpStroff(ea, n, strid):        return OpStroffEx(ea,n,strid, 0)
    def OpEnum(ea, n, enumid):         return OpEnumEx(ea,n,enumid, 0)
    def DelConst(constid, v, mask):    return DelConstEx(constid, v, 0, mask)
    def GetConst(constid, v, mask):    return GetConstEx(constid, v, 0, mask)
    def AnalyseArea(sEA, eEA):         return AnalyzeArea(sEA,eEA)
    
    def MakeStruct(ea, name):                 return MakeStructEx(ea, -1, name)
    def MakeCustomData(ea, size, dtid, fid):  return MakeCustomDataEx(ea, size, dtid, fid)
    def Name(ea):                             return NameEx(BADADDR, ea)
    def GetTrueName(ea):                      return GetTrueNameEx(BADADDR, ea)
    def MakeName(ea, name):                   return MakeNameEx(ea,name,SN_CHECK)
    
    #def GetFrame(ea):                return GetFunctionAttr(ea, FUNCATTR_FRAME)
    #def GetFrameLvarSize(ea):        return GetFunctionAttr(ea, FUNCATTR_FRSIZE)
    #def GetFrameRegsSize(ea):        return GetFunctionAttr(ea, FUNCATTR_FRREGS)
    #def GetFrameArgsSize(ea):        return GetFunctionAttr(ea, FUNCATTR_ARGSIZE)
    #def GetFunctionFlags(ea):        return GetFunctionAttr(ea, FUNCATTR_FLAGS)
    #def SetFunctionFlags(ea, flags): return SetFunctionAttr(ea, FUNCATTR_FLAGS, flags)
    
    #def SegStart(ea):                return GetSegmentAttr(ea, SEGATTR_START)
    #def SegEnd(ea):                  return GetSegmentAttr(ea, SEGATTR_END)
    #def SetSegmentType(ea, type):    return SetSegmentAttr(ea, SEGATTR_TYPE, type)
    
    def SegCreate(a1, a2, base, use32, align, comb): return AddSeg(a1, a2, base, use32, align, comb)
    def SegDelete(ea, flags):                        return DelSeg(ea, flags)
    def SegBounds(ea, startea, endea, flags):        return SetSegBounds(ea, startea, endea, flags)
    def SegRename(ea, name):                         return RenameSeg(ea, name)
    def SegClass(ea, segclass):                      return SetSegClass(ea, segclass)
    def SegAddrng(ea, bitness):                      return SetSegAddressing(ea, bitness)
    def SegDefReg(ea, reg, value):                   return SetSegDefReg(ea, reg, value)
    
    
    def Comment(ea):                return GetCommentEx(ea, 0)
    """Returns the regular comment or None"""
    
    def RptCmt(ea):                 return GetCommentEx(ea, 1)
    """Returns the repeatable comment or None"""
    
    def SetReg(ea, reg, value): return SetRegEx(ea, reg, value, SR_user)
    
    
    # Convenience functions:
    def here(): return ScreenEA()
    def isEnabled(ea): return (PrevAddr(ea+1)==ea)
    
    # Obsolete segdel macros:
    SEGDEL_PERM   = 0x0001 # permanently, i.e. disable addresses
    SEGDEL_KEEP   = 0x0002 # keep information (code & data, etc)
    SEGDEL_SILENT = 0x0004 # be silent
    
    ARGV = []
    """The command line arguments passed to IDA via the -S switch."""
    
    # END OF IDC COMPATIBILY CODE
  • 相关阅读:
    类与类之间的几种关系
    spring之BeanFactory
    java打开本地应用程序
    java笔记六:线程间的协调
    继承与组合的优缺点
    适配器模式之对象适配器
    java笔记三:List接口
    java笔记二:final关键字用法总结
    设计模式之命令模式
    利用栈实现迷宫的求解
  • 原文地址:https://www.cnblogs.com/fply/p/8506477.html
Copyright © 2011-2022 走看看