Files
rea/tests/fixtures/hopperProcedureSelectionProbe.py
T

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}))