コード例 #1
0
ファイル: x86cpToCoff.py プロジェクト: abael/pyasm
    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        
コード例 #2
0
ファイル: x86cpToCoff.py プロジェクト: pombreda/pyasm
    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
コード例 #3
0
ファイル: rawHelloWorld.py プロジェクト: pombreda/pyasm
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)
コード例 #4
0
ファイル: rawHelloWorld.py プロジェクト: grant-olson/pyasm
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