mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
"""Exercise named-entry and explicit-coordinate selection at the Hopper boundary."""
|
|
import json
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
bridge_path = sys.argv[1]
|
|
bridge = {"__file__": bridge_path, "__name__": "rea_hopper_bridge"}
|
|
exec(compile(Path(bridge_path).read_text(encoding="utf-8"), bridge_path, "exec"), bridge)
|
|
|
|
class Procedure:
|
|
def getEntryPoint(self):
|
|
return 0x401000
|
|
def getSegment(self):
|
|
return segment
|
|
class Segment:
|
|
def getNameAtAddress(self, address):
|
|
return "entry" if address == 0x401000 else "inner"
|
|
def getProcedureAtAddress(self, address):
|
|
return procedure
|
|
class Document:
|
|
def __init__(self):
|
|
self.names = []
|
|
def getCurrentAddress(self):
|
|
return 0x401004
|
|
def getAddressForName(self, name):
|
|
self.names.append(name)
|
|
return {"entry": 0x401000, "alias_entry": 0x401000, "inner": 0x401004}.get(name)
|
|
def getSegmentAtAddress(self, address):
|
|
return segment
|
|
segment = Segment()
|
|
procedure = Procedure()
|
|
document = Document()
|
|
results = {}
|
|
for selector in ["entry", "alias_entry", "inner", "0x401004", "401004", "file-offset:0x4"]:
|
|
try:
|
|
selected = bridge["_procedure"](document, selector)
|
|
results[selector] = {"entry": bridge["_hex"](selected.getEntryPoint())}
|
|
except Exception as error:
|
|
results[selector] = {"diagnostic_type": bridge["_diagnostic_type"](error), "message": str(error)}
|
|
print(json.dumps({"results": results, "name_lookups": document.names}))
|