From f779fa1557b582f2c8485c1ea60ce3d8813694bb Mon Sep 17 00:00:00 2001 From: tntexplosivesltd Date: Thu, 23 Nov 2023 00:33:27 +1300 Subject: [PATCH] Move Bin and SymInfo into their own files --- tools/isledecomp/isledecomp/__init__.py | 4 +- tools/isledecomp/isledecomp/bin.py | 47 ++++++++ tools/isledecomp/isledecomp/syminfo.py | 138 ++++++++++++++++++++++++ tools/isledecomp/isledecomp/utils.py | 57 +--------- tools/reccmp/reccmp.py | 137 +---------------------- 5 files changed, 194 insertions(+), 189 deletions(-) create mode 100644 tools/isledecomp/isledecomp/bin.py create mode 100644 tools/isledecomp/isledecomp/syminfo.py 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("