Skip to content

Commit 9d50d3b

Browse files
committed
find_first param for search
1 parent 5411e8b commit 9d50d3b

File tree

4 files changed

+28
-18
lines changed

4 files changed

+28
-18
lines changed

minidump/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
__version__ = "0.0.14"
2+
__version__ = "0.0.15"
33
__banner__ = \
44
"""
55
# minidump %s

minidump/aminidumpreader.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@ async def get_ptr_with_offset(self, pos):
226226
await self.move(pos)
227227
return await self.read_uint()
228228

229-
async def find_in_module(self, module_name, pattern):
230-
t = await self.reader.search_module(module_name, pattern)
229+
async def find_in_module(self, module_name, pattern, find_first = False, reverse_order = False):
230+
t = await self.reader.search_module(module_name, pattern, find_first = find_first, reverse_order = reverse_order)
231231
return t
232232

233233

@@ -271,18 +271,20 @@ def get_module_by_name(self, module_name):
271271
return mod
272272
return None
273273

274-
async def search_module(self, module_name, pattern):
274+
async def search_module(self, module_name, pattern, find_first = False, reverse_order = False):
275275
mod = self.get_module_by_name(module_name)
276276
if mod is None:
277277
raise Exception('Could not find module! %s' % module_name)
278-
t = []
278+
needles = []
279279
for ms in self.memory_segments:
280280
if mod.baseaddress <= ms.start_virtual_address < mod.endaddress:
281-
t += await ms.asearch(pattern, self.file_handle)
281+
needles += await ms.asearch(pattern, self.file_handle, find_first = find_first)
282+
if len(needles) > 0 and find_first is True:
283+
return needles
282284

283-
return t
285+
return needles
284286

285-
async def search(self, pattern):
287+
async def search(self, pattern, find_first = False):
286288
t = []
287289
for ms in self.memory_segments:
288290
t += await ms.asearch(pattern, self.file_handle)

minidump/common_structs.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ async def aread(self, virtual_address, size, file_handler):
155155
await file_handler.seek(pos, 0)
156156
return data
157157

158-
def search(self, pattern, file_handler):
158+
def search(self, pattern, file_handler, find_first = False):
159159
if len(pattern) > self.size:
160160
return []
161161
pos = file_handler.tell()
@@ -171,10 +171,12 @@ def search(self, pattern, file_handler):
171171
fl.append(marker + offset + self.start_virtual_address)
172172
data = data[marker+1:]
173173
offset = marker + 1
174+
if find_first is True:
175+
return fl
174176

175177
return fl
176178

177-
async def asearch(self, pattern, file_handler):
179+
async def asearch(self, pattern, file_handler, find_first = False):
178180
if len(pattern) > self.size:
179181
return []
180182
pos = file_handler.tell()
@@ -190,6 +192,8 @@ async def asearch(self, pattern, file_handler):
190192
fl.append(marker + offset + self.start_virtual_address)
191193
data = data[marker+1:]
192194
offset = marker + 1
195+
if find_first is True:
196+
return fl
193197

194198
return fl
195199

minidump/minidumpreader.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ def get_ptr_with_offset(self, pos):
216216
self.move(pos)
217217
return self.read_uint()
218218

219-
def find_in_module(self, module_name, pattern):
220-
t = self.reader.search_module(module_name, pattern)
219+
def find_in_module(self, module_name, pattern, find_first = False, reverse_order = False):
220+
t = self.reader.search_module(module_name, pattern, find_first = find_first, reverse_order = reverse_order)
221221
return t
222222

223223

@@ -261,21 +261,25 @@ def get_module_by_name(self, module_name):
261261
return mod
262262
return None
263263

264-
def search_module(self, module_name, pattern):
264+
def search_module(self, module_name, pattern, find_first = False, reverse_order = False):
265265
mod = self.get_module_by_name(module_name)
266266
if mod is None:
267267
raise Exception('Could not find module! %s' % module_name)
268-
t = []
268+
269+
needles = []
269270
for ms in self.memory_segments:
270271
if mod.baseaddress <= ms.start_virtual_address < mod.endaddress:
271-
t+= ms.search(pattern, self.file_handle)
272+
needles+= ms.search(pattern, self.file_handle, find_first = find_first)
273+
if len(needles) > 0 and find_first is True:
274+
return needles
272275

273-
return t
274276

275-
def search(self, pattern):
277+
return needles
278+
279+
def search(self, pattern, find_first = False):
276280
t = []
277281
for ms in self.memory_segments:
278-
t+= ms.search(pattern, self.file_handle)
282+
t+= ms.search(pattern, self.file_handle, find_first = find_first)
279283

280284
return t
281285

0 commit comments

Comments
 (0)