Skip to content

Commit 4b246bd

Browse files
committed
cptbox: add array-like register accessors
1 parent 485f264 commit 4b246bd

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

dmoj/cptbox/_cptbox.pyi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ PTBOX_ABI_COUNT: int
1212
ALL_ABIS: List[int]
1313
SUPPORTED_ABIS: List[int]
1414

15+
class ArgAccessor:
16+
def __getitem__(self, reg : int) -> int: ...
17+
def __setitem__(self, reg : int, val : int) -> None: ...
18+
1519
class Debugger:
1620
syscall: int
1721
result: int
@@ -22,6 +26,7 @@ class Debugger:
2226
arg3: int
2327
arg4: int
2428
arg5: int
29+
arg: ArgAccessor
2530

2631
uresult: int
2732
uarg0: int
@@ -30,6 +35,7 @@ class Debugger:
3035
uarg3: int
3136
uarg4: int
3237
uarg5: int
38+
uarg: ArgAccessor
3339

3440
pid: int
3541
tid: int

dmoj/cptbox/_cptbox.pyx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,22 @@ def memory_fd_seal(int fd):
225225

226226
cdef class Process
227227

228+
cdef class Debugger
229+
230+
cdef class ArgAccessor:
231+
cdef object base
232+
cdef Debugger debugger
233+
234+
def __cinit__(self, Debugger debugger, object base):
235+
self.debugger = debugger
236+
self.base = base
237+
238+
def __getitem__(self, reg):
239+
return getattr('%s%d' % (self.base, reg), self.debugger)
240+
241+
def __setitem__(self, reg, val):
242+
setattr('%s%d' % (self.base, reg), self.debugger, val)
243+
228244

229245
cdef class Debugger:
230246
cdef pt_debugger *thisptr
@@ -235,6 +251,8 @@ cdef class Debugger:
235251
self.thisptr = new pt_debugger()
236252
self.process = process
237253
self.on_return_callback = {}
254+
self.uarg = ArgAccessor(self, "uarg")
255+
self.arg = ArgAccessor(self, "arg")
238256

239257
def __dealloc__(self):
240258
del self.thisptr

0 commit comments

Comments
 (0)