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)
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()
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)
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)