add CLIFile.read_at and remove parse_at length requirement

This commit is contained in:
Shiz 2020-06-02 00:58:14 +02:00
parent de3d934314
commit 21d55f5a2d
1 changed files with 9 additions and 4 deletions

View File

@ -45,6 +45,7 @@ class CLIFile:
def __init__(self, fn):
self.name = fn
self.pe = pefile.PE(fn)
self.handle = open(fn, 'rb')
self.header = None
self.metadata = None
self.streams = {}
@ -53,11 +54,15 @@ class CLIFile:
def __repr__(self):
return '<{}: "{}">'.format(self.__class__.__name__, self.name)
def read_at(self, offset, size):
return self.pe.get_data(rva=offset, length=size)
def parse_at(self, c, offset, size=None):
if size is None:
size = destruct.sizeof(c)
buf = self.pe.get_data(rva=offset, length=size)
return destruct.parse(c, buf)
if size:
c = destruct.Capped(c, size)
pos = self.pe.get_offset_from_rva(offset)
with destruct.seeking(self.handle, pos) as f:
return destruct.parse(c, f)
def parse(self):
net_data_entry = pefile.DIRECTORY_ENTRY['IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR']