Factor out relocation code into method
This commit is contained in:
@@ -42,34 +42,8 @@ class O65():
|
|||||||
|
|
||||||
self.undef_ref_cnt = _file.read(2)
|
self.undef_ref_cnt = _file.read(2)
|
||||||
|
|
||||||
offset = _file.read(1)
|
self.text_reloc = self._parse_reloc(_file)
|
||||||
while offset != b'\x00':
|
self.data_reloc = self._parse_reloc(_file)
|
||||||
offset_val = 0
|
|
||||||
while offset == b'\xff':
|
|
||||||
offset = _file.read(1)
|
|
||||||
offset_val += int.from_bytes(offset) - 1
|
|
||||||
offset_val += int.from_bytes(offset)
|
|
||||||
typebyte = int.from_bytes(_file.read(1))
|
|
||||||
lobyte = None
|
|
||||||
if typebyte & 0x40:
|
|
||||||
lobyte = int.from_bytes(_file.read(1))
|
|
||||||
self.text_reloc.append((offset_val, typebyte, lobyte))
|
|
||||||
offset = _file.read(1)
|
|
||||||
|
|
||||||
|
|
||||||
offset = _file.read(1)
|
|
||||||
while offset != b'\x00':
|
|
||||||
offset_val = 0
|
|
||||||
while offset == b'\xff':
|
|
||||||
offset = _file.read(1)
|
|
||||||
offset_val += int.from_bytes(offset) - 1
|
|
||||||
offset_val += int.from_bytes(offset)
|
|
||||||
typebyte = int.from_bytes(_file.read(1))
|
|
||||||
lobyte = None
|
|
||||||
if typebyte & 0x40:
|
|
||||||
lobyte = int.from_bytes(_file.read(1))
|
|
||||||
self.data_reloc.append((offset_val, typebyte, lobyte))
|
|
||||||
offset = _file.read(1)
|
|
||||||
|
|
||||||
export_count = int.from_bytes(_file.read(2), byteorder="little")
|
export_count = int.from_bytes(_file.read(2), byteorder="little")
|
||||||
for _ in range(export_count):
|
for _ in range(export_count):
|
||||||
@@ -85,6 +59,23 @@ class O65():
|
|||||||
value = int.from_bytes(_file.read(2), byteorder="little")
|
value = int.from_bytes(_file.read(2), byteorder="little")
|
||||||
self.exports.append((name.decode(), segment, value))
|
self.exports.append((name.decode(), segment, value))
|
||||||
|
|
||||||
|
def _parse_reloc(self, fd: io.BufferedReader) -> list[(int, int, int)]:
|
||||||
|
reloc: list[(int, int, int)] = []
|
||||||
|
offset = fd.read(1)
|
||||||
|
while offset != b'\x00':
|
||||||
|
offset_val = 0
|
||||||
|
while offset == b'\xff':
|
||||||
|
offset = fd.read(1)
|
||||||
|
offset_val += int.from_bytes(offset) - 1
|
||||||
|
offset_val += int.from_bytes(offset)
|
||||||
|
typebyte = int.from_bytes(fd.read(1))
|
||||||
|
lobyte = None
|
||||||
|
if typebyte & 0x40:
|
||||||
|
lobyte = int.from_bytes(fd.read(1))
|
||||||
|
reloc.append((offset_val, typebyte, lobyte))
|
||||||
|
offset = fd.read(1)
|
||||||
|
return reloc
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
if len(sys.argv) < 2:
|
if len(sys.argv) < 2:
|
||||||
|
|||||||
Reference in New Issue
Block a user