All pastes #773271 Raw Edit

Unnamed

public python v1 · immutable
·published 2007-11-14 11:51 UTC
rendered paste body
import glob, os, syssys.path.append('..\\..')from PyStand import Structuint8 = Struct.uint8uint16 = Struct.uint16uint32 = Struct.uint32string = Struct.stringclass OptimisticObj(object):	class ImageFileHeader(Struct):		__endian__ = Struct.LE		def __format__(self):			self.machine, self.numberOfSections = uint16[2]			self.timestamp, self.symtab, self.numsyms = uint32[3]			self.optHdrSize, self.characteristics = uint16[2]		class ImageSectionHeader(Struct):		__endian__ = Struct.LE		def __format__(self):			self.Name = string(8, stripNulls=True)			self.VirtualSize, self.VirtualAddress = uint32[2]			self.SizeOfRawData, self.RawData = uint32[2]			self.Relocations, self.Linenumbers = uint32[2]			self.NumRelocations, self.NumLinenumbers = uint16[2]			self.Characteristics = uint32		class ImageSymbol(Struct):		__endian__ = Struct.LE		def __format__(self):			self.name = uint32[2]			self.value = uint32			self.sectionNumber = uint16			self.type = uint16			self.storageClass = uint8			self.numAuxSym = uint8		def __init__(self, data):		imgheader = self.ImageFileHeader(data)		pos = len(imgheader)				sectheader = self.ImageSectionHeader()		for i in xrange(imgheader.numberOfSections):			sectheader.unpack(data, pos)			pos += len(sectheader)				pos = imgheader.symtab		imgsym = self.ImageSymbol()		for i in xrange(imgheader.numsyms):			imgsym.unpack(data, pos)			if imgsym.storageClass == 2:				if imgsym.name[0] != 0:					name = data[pos:pos+8]				else:					temp = imgheader.symtab + (len(imgsym) * imgheader.numsyms) + imgsym.name[1]					name = data[temp:].split('\0', 1)[0]								print name, imgsym.value, imgsym.sectionNumber						pos += len(imgsym)class Optimistic(object):	class AR_MemberHeader(Struct):		__endian__ = Struct.LE		def __format__(self):			self.name = string(16)			self.date = string(12)			self.userID = string(6)			self.groupID = string(6)			self.mode = string(8)			self.size = string(10)			self.endHeader = string(2)			self.data = string(0)		def __init__(self, path):		for fn in glob.glob(path + '\\*.lib'):			self.splitLib(fn)		def splitLib(self, fn):		fp = file(fn, 'rb')		assert fp.read(8) == '!<arch>\n'				while True:			member = self.readMember(fp)			if not member:				break						if member.data[:2] == '\x4C\x01':				OptimisticObj(member.data)		def readMember(self, fp):		member = self.AR_MemberHeader()		try:			member.unpack(fp.read(len(member)))		except:			return None		assert member.endHeader == '`\n'		member.data = fp.read(int(member.size))		if fp.tell() & 1:			fp.read(1)				return memberif __name__=='__main__':	Optimistic(*sys.argv[1:])