Skip to content

Commit

Permalink
Move type hints to __init__.py
Browse files Browse the repository at this point in the history
  • Loading branch information
mrexodia committed Sep 22, 2024
1 parent 7ab27ed commit b376658
Show file tree
Hide file tree
Showing 3 changed files with 137 additions and 135 deletions.
138 changes: 137 additions & 1 deletion python/icicle/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,137 @@
from .icicle import *
from typing import List, Dict, Tuple
from enum import Enum

class MemoryProtection(Enum):
NoAccess = ...
ReadOnly = ...
ReadWrite = ...
ExecuteOnly = ...
ExecuteRead = ...
ExecuteReadWrite = ...

class MemoryExceptionCode(Enum):
Unallocated = ...
Unmapped = ...
UnmappedRegisters = ...
Uninitialized = ...
ReadViolation = ...
WriteViolation = ...
ExecViolation = ...
ReadWatch = ...
WriteWatch = ...
Unaligned = ...
OutOfMemory = ...
SelfModifyingCode = ...
AddressOverflow = ...
Unknown = ...

class RunStatus(Enum):
Running = ...
InstructionLimit = ...
Breakpoint = ...
Interrupted = ...
Halt = ...
Killed = ...
Deadlock = ...
OutOfMemory = ...
Unimplemented = ...
UnhandledException = ...

class ExceptionCode(Enum):
NoException = ...
InstructionLimit = ...
Halt = ...
Sleep = ...
Syscall = ...
CpuStateChanged = ...
DivisionException = ...
ReadUnmapped = ...
ReadPerm = ...
ReadUnaligned = ...
ReadWatch = ...
ReadUninitialized = ...
WriteUnmapped = ...
WritePerm = ...
WriteWatch = ...
WriteUnaligned = ...
ExecViolation = ...
SelfModifyingCode = ...
OutOfMemory = ...
AddressOverflow = ...
InvalidInstruction = ...
UnknownInterrupt = ...
UnknownCpuID = ...
InvalidOpSize = ...
InvalidFloatSize = ...
CodeNotTranslated = ...
ShadowStackOverflow = ...
ShadowStackInvalid = ...
InvalidTarget = ...
UnimplementedOp = ...
ExternalAddr = ...
Environment = ...
JitError = ...
InternalError = ...
UnmappedRegister = ...
UnknownError = ...

class Icicle:
def __init__(self, architecture: str, *,
jit = True,
jit_mem = True,
shadow_stack = True,
recompilation = True,
track_uninitialized = False,
optimize_instructions = True,
optimize_block = True,
tracing = False,
) -> None: ...

@property
def exception_code(self) -> ExceptionCode: ...

@property
def exception_value(self) -> int: ...

icount: int

icount_limit: int

# TODO: API to get memory information?

def mem_map(self, address: int, size: int, protection: MemoryProtection): ...

def mem_unmap(self, address: int, size: int): ...

def mem_protect(self, address: int, size: int, protection: MemoryProtection): ...

def mem_read(self, address: int, size: int) -> bytes: ...

def mem_write(self, address: int, data: bytes) -> None: ...

def reg_list(self) -> Dict[str, Tuple[int, int]]: ...

def reg_offset(self, name: str) -> int: ...

def reg_size(self, name: str) -> int: ...

def reg_read(self, name: str) -> int: ...

def reg_write(self, name: str, value: int) -> None: ...

def reset(self): ...

def run(self) -> RunStatus: ...

def run_until(self, address: int) -> RunStatus: ...

def step(self, count: int) -> RunStatus: ...

def add_breakpoint(self, address: int) -> bool: ...

def remove_breakpoint(self, address: int) -> bool: ...

def architectures() -> List[str]: ...

class MemoryException(Exception):
def __init__(self, message: str, code: MemoryExceptionCode):
Expand All @@ -19,3 +152,6 @@ def __ghidra_init():
raise FileNotFoundError("Ghidra processor definitions not found")

__ghidra_init()

# NOTE: This overrides the stubs at runtime with the actual implementation
from .icicle import *
134 changes: 0 additions & 134 deletions python/icicle/icicle.pyi

This file was deleted.

Empty file removed python/icicle/py.typed
Empty file.

0 comments on commit b376658

Please sign in to comment.