Skip to content

Commit f7626ea

Browse files
committed
Fix a bug with __getitem__ for pointer types
1 parent 72c53d2 commit f7626ea

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/dumpulator/ntprimitives.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ def __getitem__(self, index):
7171
return self.arch.read_ptr(self.ptr + index * self.arch.ptr_size())
7272
else:
7373
assert index == 0 # TODO: sizeof() not yet implemented
74-
return self.type(self)
74+
sizeof = self.arch.ptr_size()
75+
ptr = self.ptr + index * sizeof
76+
if issubclass(self.type, PVOID):
77+
return self.type(self.arch.read_ptr(ptr), self.arch)
78+
else:
79+
return self.type(PVOID(ptr, self.arch))
7580

7681
def __int__(self):
7782
return self.ptr
@@ -98,7 +103,7 @@ def read_ptr(self):
98103

99104
def deref(self):
100105
assert self.type is not None
101-
return self.type(self)
106+
return self[0]
102107

103108
def P(t):
104109
class P(PVOID):

src/dumpulator/ntsyscalls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2446,8 +2446,8 @@ def ZwProtectVirtualMemory(dp: Dumpulator,
24462446
NewProtect: ULONG,
24472447
OldProtect: P(ULONG)
24482448
):
2449-
base = BaseAddress[0] & 0xFFFFFFFFFFFFF000
2450-
size = round_to_pages(RegionSize[0])
2449+
base = BaseAddress.read_ptr() & 0xFFFFFFFFFFFFF000
2450+
size = round_to_pages(RegionSize.read_ptr())
24512451

24522452
print(f"protect {base:x}[{size:x}] = {NewProtect:x}")
24532453
dp.protect(base, size, NewProtect)

0 commit comments

Comments
 (0)