diff --git a/tools/isledecomp/isledecomp/__init__.py b/tools/isledecomp/isledecomp/__init__.py index 77de2b08..a95f1869 100644 --- a/tools/isledecomp/isledecomp/__init__.py +++ b/tools/isledecomp/isledecomp/__init__.py @@ -1,3 +1,5 @@ +from .bin import * from .dir import * -from .utils import * from .parser import * +from .syminfo import * +from .utils import * diff --git a/tools/isledecomp/isledecomp/bin.py b/tools/isledecomp/isledecomp/bin.py new file mode 100644 index 00000000..38245ace --- /dev/null +++ b/tools/isledecomp/isledecomp/bin.py @@ -0,0 +1,47 @@ +import struct + + +# Declare a class that can automatically convert virtual executable addresses +# to file addresses +class Bin: + def __init__(self, filename, logger): + self.logger = logger + self.logger.debug('Parsing headers of "%s"... ', filename) + self.filename = filename + self.file = None + self.imagebase = None + self.textvirt = None + self.textraw = None + + def __enter__(self): + self.logger.debug(f"Bin {self.filename} Enter") + self.file = open(self.filename, "rb") + + # HACK: Strictly, we should be parsing the header, but we know where + # everything is in these two files so we just jump straight there + + # Read ImageBase + self.file.seek(0xB4) + (self.imagebase,) = struct.unpack("