def textSection(self): sect = coffSection() sect.Name = '.text\x00\x00\x00' sect.Flags = (SectionFlags.CNT_CODE | SectionFlags.LNK_COMDAT | SectionFlags.MEM_EXECUTE | SectionFlags.MEM_READ | SectionFlags.ALIGN_16BYTES) sect.RawData = self.cp.Code for patchin in self.cp.CodePatchins: # How do I tell what type it is? addr = patchin[1] if patchin[2] == DIRECT: patchinType = RelocationTypes.I386_DIR32 elif patchin[2] == RELATIVE: patchinType = RelocationTypes.I386_REL32 else: raise RuntimeError("Invalid patchin type") try: loc = self.coff.Symbols.GetLocation(patchin[0]) r = coffRelocationEntry(addr,loc,typ=patchinType) except coffError: r = coffRelocationEntry(addr,0x0,typ=patchinType) sect.RelocationData.append(r) sym = self.coff.Symbols.GetSymbol('.text\x00\x00\x00') sym.RebuildAuxiliaries(len(sect.RawData),len(self.cp.CodePatchins),0, crc32(sect.RawData),0,0) # attempt to add line numbers for sym in self.cp.CodeSymbols: symLoc = self.coff.Symbols.GetLocation(sym[0]) sect.LineNumberData.append(coffLineNumberEntry(symLoc,0x0)) return sect
def textSection(self): sect = coffSection() sect.Name = '.text\x00\x00\x00' sect.Flags = (SectionFlags.CNT_CODE | SectionFlags.LNK_COMDAT | SectionFlags.MEM_EXECUTE | SectionFlags.MEM_READ | SectionFlags.ALIGN_16BYTES) sect.RawData = self.cp.Code for patchin in self.cp.CodePatchins: # How do I tell what type it is? addr = patchin[1] if patchin[2] == DIRECT: patchinType = RelocationTypes.I386_DIR32 elif patchin[2] == RELATIVE: patchinType = RelocationTypes.I386_REL32 else: raise RuntimeError("Invalid patchin type") try: loc = self.coff.Symbols.GetLocation(patchin[0]) r = coffRelocationEntry(addr, loc, typ=patchinType) except coffError: r = coffRelocationEntry(addr, 0x0, typ=patchinType) sect.RelocationData.append(r) sym = self.coff.Symbols.GetSymbol('.text\x00\x00\x00') sym.RebuildAuxiliaries(len(sect.RawData), len(self.cp.CodePatchins), 0, crc32(sect.RawData), 0, 0) # attempt to add line numbers for sym in self.cp.CodeSymbols: symLoc = self.coff.Symbols.GetLocation(sym[0]) sect.LineNumberData.append(coffLineNumberEntry(symLoc, 0x0)) return sect
s1.Flags = (SectionFlags.LNK_REMOVE | SectionFlags.LNK_INFO | SectionFlags.ALIGN_1BYTES) s1.RawData = '-defaultlib:LIBCMT -defaultlib:OLDNAMES ' c.Sections.append(s1) s2 = coffSection() s2.Name = ".text\x00\x00\x00" s2.Flags = (SectionFlags.CNT_CODE | SectionFlags.LNK_COMDAT | SectionFlags.MEM_EXECUTE | SectionFlags.MEM_READ | SectionFlags.ALIGN_16BYTES) s2.RawData = "\x68\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x83\xC4\x04\x33\xC0\xC3" r = coffRelocationEntry(addr=0x1,sym=0xC,typ=RelocationTypes.I386_DIR32) s2.RelocationData.append(r) r= coffRelocationEntry(addr=0x6,sym=0x9,typ=RelocationTypes.I386_REL32) s2.RelocationData.append(r) c.Sections.append(s2) s3 = coffSection() s3.Name = '.data\x00\x00\x00' s3.Flags = (SectionFlags.LNK_COMDAT | SectionFlags.CNT_INITIALIZED_DATA | SectionFlags.MEM_WRITE | SectionFlags.MEM_READ | SectionFlags.ALIGN_4BYTES)
s1.Flags = SectionFlags.LNK_REMOVE | SectionFlags.LNK_INFO | SectionFlags.ALIGN_1BYTES s1.RawData = "-defaultlib:LIBCMT -defaultlib:OLDNAMES " c.Sections.append(s1) s2 = coffSection() s2.Name = ".text\x00\x00\x00" s2.Flags = ( SectionFlags.CNT_CODE | SectionFlags.LNK_COMDAT | SectionFlags.MEM_EXECUTE | SectionFlags.MEM_READ | SectionFlags.ALIGN_16BYTES ) s2.RawData = "\x68\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x83\xC4\x04\x33\xC0\xC3" r = coffRelocationEntry(addr=0x1, sym=0xC, typ=RelocationTypes.I386_DIR32) s2.RelocationData.append(r) r = coffRelocationEntry(addr=0x6, sym=0x9, typ=RelocationTypes.I386_REL32) s2.RelocationData.append(r) c.Sections.append(s2) s3 = coffSection() s3.Name = ".data\x00\x00\x00" s3.Flags = ( SectionFlags.LNK_COMDAT | SectionFlags.CNT_INITIALIZED_DATA | SectionFlags.MEM_WRITE | SectionFlags.MEM_READ