Major items:
CreateBreakWorld:
PROCEDURE [
name: Rope.
ROPE,
peekContents: PeekContentsProc,
pokeContents: PokeContentsProc,
getProcAddress: GetProcAddressProc,
getProcDataSegment: GetProcDataSegmentProc,
getPatchArea: GetPatchAreaProc,
monitoredCall: MonitoredCallProc,
worldAccessData: WorldAccessData]
RETURNS [BreakWorld];
calls BreakWorldFromWorldAccess[CreateWorldAccess[...]].
CreateWorldAccess:
PROCEDURE [
name: Rope.
ROPE,
peekContents: PeekContentsProc,
pokeContents: PokeContentsProc,
getProcAddress: GetProcAddressProc,
getProcDataSegment: GetProcDataSegmentProc,
getPatchArea: GetPatchAreaProc,
monitoredCall: MonitoredCallProc,
worldAccessData: WorldAccessData]
RETURNS [WorldAccess];
BreakWorldFromWorldAccess:
PROCEDURE [worldAccess: WorldAccess]
RETURNS [BreakWorld];
BreakWorld accessors.
IsNullBreakWorld:
PROCEDURE [breakWorld: BreakWorld]
RETURNS [
BOOLEAN];
WorldAccessFromBreakWorld:
PROCEDURE [breakWorld: BreakWorld]
RETURNS [WorldAccess];
BreakAccessFromBreakWorld: PROCEDURE [breakWorld: BreakWorld]
RETURNS [BreakAccess];
Object style accessors:
PeekContents:
PROCEDURE [
address: Address,
displacement: TargetArchitecture.Displacement ¬ TargetArchitecture.nullDisplacement]
RETURNS [TargetArchitecture.Contents];
PokeContents:
PROCEDURE [
address: Address,
displacement: TargetArchitecture.Displacement ¬ TargetArchitecture.nullDisplacement,
contents: TargetArchitecture.Contents]
RETURNS [];
This had better be atomic!
GetProcAddress:
PROCEDURE [breakWorld: BreakWorld, procName: Rope.
ROPE]
RETURNS [Address];
GetProcDataSegment:
PROCEDURE [breakWorld: BreakWorld, address: Address]
RETURNS [Address];
GetPatchArea:
PROCEDURE [address: Address]
RETURNS [PatchArea];
MonitoredCall:
PROCEDURE [address: Address, proc:
PROCEDURE []
RETURNS []]
RETURNS [];
Useful procedures for object-style on Addresses, Instructions, etc.:
NewAddress:
PROCEDURE [breakWorld: BreakWorld, address: TargetArchitecture.Address]
RETURNS [Address];
TargetAddressFromBreakWorldAddress:
PROCEDURE [address: Address]
RETURNS [TargetArchitecture.Address];
BreakWorldFromBreakWorldAddress:
PROCEDURE [address: Address]
RETURNS [BreakWorld];
IsNullAddress:
PROCEDURE [address: Address]
RETURNS [
BOOLEAN];
AddressEqual:
PROCEDURE [this: Address, that: Address]
RETURNS [
BOOLEAN];
AddressFromDisplacement:
PROCEDURE [
address: Address,
displacement: TargetArchitecture.Displacement]
RETURNS [Address];
NextInstruction:
PROCEDURE [pc: Address]
RETURNS [Address];
PrevInstruction:
PROCEDURE [pc: Address]
RETURNS [Address];
PeekInstruction:
PROCEDURE [
pc: Address,
displacement: TargetArchitecture.Displacement ¬ TargetArchitecture.nullDisplacement]
RETURNS [TargetArchitecture.Instruction];
PokeInstruction:
PROCEDURE [
pc: Address,
displacement: TargetArchitecture.Displacement ¬ TargetArchitecture.nullDisplacement,
instruction: TargetArchitecture.Instruction]
RETURNS [];
This had better be atomic!
IsNullPatchArea:
PROCEDURE [patchArea: PatchArea]
RETURNS [
BOOLEAN];