Esempio n. 1
0
    def __init__(self, bar, BinInfo, FuncInfo, BBInfo):
        Functions.__init__(self, bar, BinInfo, FuncInfo)
        self.BasicBlockLayout = []
        self.lookupByVA = dict()

        # Unpack the basic block information
        self.BBSize, self.BBFixupCnt, self.BBFallThrough, self.BBOffsetFromSection, \
                self.BBSec, self.BBPadding, self.BBAssembleType = BBInfo
        self.numFixups = sum(self.BBFixupCnt)
        self.numBasicBlocks = len(self.BBSize)

        # binpang, add
        self.BBSecVA = [self.secVA[sec_name] for sec_name in self.BBSec]

        # BB X belongs to Func Y; dict(X:Y)
        self.BB2Func = util.buildLookupTbl(self.funcBBCnt)

        # self.BBOffset = util.getOffset(self.BBSize)
        self.BBOffsetFromFunc = util.getOffsetFromAccordingOffset(
            self.funcBBCnt, self.BBOffsetFromSection)
        self.BBOffsetFromBase = util.computeOffsetFromBase(
            self.BBOffsetFromSection, self.BBSecVA, self.base)
        self.BBVA = util.computeRelaOffset(self.BBOffsetFromBase, self.base)

        self.generateBasicBlockList(bar)
Esempio n. 2
0
    def __init__(self, FixupData, constructInfo, sectionName, bar):
        self.FixupData = FixupData
        self.FixupsLayout = []
        # The following layout is only defined when special section has been found in .text
        self.FixupsLayoutSpecial = []
        # The following layout is only defined in CFI-enabled binary with LLVM (-cfi-icall)
        self.FixupsLayoutOrphan = []

        self.CI = constructInfo
        self.elfParser = self.CI.getElfParser()
        self.sectionName = sectionName
        self.secOff = self.elfParser.getSectionVA(self.sectionName)

        if sectionName == C.SEC_TEXT:
            self.Fixup2BB = util.buildLookupTbl(self.CI.BBFixupCnt)

        self._generateFixupList(bar)
        self.numFixups = len(self.FixupsLayout)
        self.numFixupsSpecial = len(self.FixupsLayoutSpecial)
        self._processRefs()
Esempio n. 3
0
    def __init__(self, bar, BinInfo, ObjInfo, FuncInfo):
        Objects.__init__(self, bar, BinInfo, ObjInfo)
        self.FunctionLayout = []
        self.lookupByVA = dict()
    
        # Unpack the function information
        self.funcSize, self.funcBBCnt = FuncInfo
        self.numBBs = sum(self.funcBBCnt)
        self.numFunctions = len(self.funcSize)

        # Func X belongs to Obj Y; dict(X:Y)
        self.func2Obj = util.buildLookupTbl(self.objFuncCnt)

        self.funcOffset = util.getOffset(self.funcSize)
        self.funcOffsetFromObj = util.getOffsetFrom(self.objFuncCnt, self.funcSize)
        self.funcOffsetFromSection = util.computeRelaOffset(self.funcOffset, self.reorderObjStartFromText)
        self.BBOffsetFromBase = util.computeRelaOffset(self.funcOffsetFromSection, self.baseOffsetFromFile)
        self.funcVA = util.computeRelaOffset(self.BBOffsetFromBase, self.base)

        self.generateFunctionList(bar)
Esempio n. 4
0
    def __init__(self, bar, BinInfo, ObjInfo, FuncInfo, BBInfo):
        Functions.__init__(self, bar, BinInfo, ObjInfo, FuncInfo)
        self.BasicBlockLayout = []
        self.lookupByVA = dict()

        # Unpack the basic block information
        self.BBSize, self.BBFixupCnt, self.BBFallThrough = BBInfo
        self.numFixups = sum(self.BBFixupCnt)
        self.numBasicBlocks = len(self.BBSize)

        # BB X belongs to Func Y; dict(X:Y)
        self.BB2Func = util.buildLookupTbl(self.funcBBCnt)

        self.BBOffset = util.getOffset(self.BBSize)
        self.BBOffsetFromFunc = util.getOffsetFrom(self.funcBBCnt, self.BBSize)
        self.BBOffsetFromObj = util.getOffsetFrom(self._getObjBBCnt(), self.BBSize)
        self.BBOffsetFromSection = util.computeRelaOffset(self.BBOffset, self.reorderObjStartFromText)
        self.BBOffsetFromBase = util.computeRelaOffset(self.BBOffsetFromSection, self.baseOffsetFromFile)
        self.BBVA = util.computeRelaOffset(self.BBOffsetFromBase, self.base)

        self.generateBasicBlockList(bar)