Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def parse(buff):
raw_stream_type_value = MINIDUMP_DIRECTORY.get_stream_type_value(buff)
# StreamType value that are over 0xffff are considered MINIDUMP_USER_STREAM streams
# and their format depends on the client used to create the minidump.
# As per the documentation, this stream should be ignored : https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ne-minidumpapiset-minidumminidump_dirp_stream_type#remarks
is_user_stream = raw_stream_type_value > MINIDUMP_STREAM_TYPE.LastReservedStream.value
is_stream_supported = raw_stream_type_value in MINIDUMP_STREAM_TYPE._value2member_map_
if is_user_stream and not is_stream_supported:
return None
md = MINIDUMP_DIRECTORY()
md.StreamType = MINIDUMP_STREAM_TYPE(raw_stream_type_value)
md.Location = MINIDUMP_LOCATION_DESCRIPTOR.parse(buff)
return md
def create_streams(self):
sysinfo = self.sysreader.get_sysinfo()
self.streams[MINIDUMP_STREAM_TYPE.SystemInfoStream] = sysinfo
print(str(sysinfo))
moduleinfo = self.sysreader.get_modules()
self.streams[MINIDUMP_STREAM_TYPE.ModuleListStream] = moduleinfo
sections = self.sysreader.get_sections()
self.streams[MINIDUMP_STREAM_TYPE.MemoryInfoListStream] = sections
self.finalize_header()
memory = self.sysreader.get_memory()
elif dir.StreamType == MINIDUMP_STREAM_TYPE.MemoryListStream:
logging.debug('Found MemoryListStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.memory_segments = MinidumpMemoryList.parse(dir, self.file_handle)
#logging.debug(str(self.memory_segments))
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.SystemInfoStream:
logging.debug('Found SystemInfoStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.sysinfo = MinidumpSystemInfo.parse(dir, self.file_handle)
#logging.debug(str(self.sysinfo))
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.ThreadExListStream:
logging.debug('Found ThreadExListStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.threads_ex = MinidumpThreadExList.parse(dir, self.file_handle)
#logging.debug(str(self.threads_ex))
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.Memory64ListStream:
logging.debug('Found Memory64ListStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.memory_segments_64 = MinidumpMemory64List.parse(dir, self.file_handle)
#logging.debug(str(self.memory_segments_64))
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.CommentStreamA:
logging.debug('Found CommentStreamA @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.comment_a = CommentStreamA.parse(dir, self.file_handle)
#logging.debug(str(self.comment_a))
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.CommentStreamW:
logging.debug('Found CommentStreamW @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.comment_w = CommentStreamW.parse(dir, self.file_handle)
#logging.debug(str(self.comment_w))
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.ExceptionStream:
logging.debug('Found ExceptionStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
def parse(buff):
raw_stream_type_value = MINIDUMP_DIRECTORY.get_stream_type_value(buff)
# StreamType value that are over 0xffff are considered MINIDUMP_USER_STREAM streams
# and their format depends on the client used to create the minidump.
# As per the documentation, this stream should be ignored : https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ne-minidumpapiset-minidumminidump_dirp_stream_type#remarks
is_user_stream = raw_stream_type_value > MINIDUMP_STREAM_TYPE.LastReservedStream.value
is_stream_supported = raw_stream_type_value in MINIDUMP_STREAM_TYPE._value2member_map_
if is_user_stream and not is_stream_supported:
return None
md = MINIDUMP_DIRECTORY()
md.StreamType = MINIDUMP_STREAM_TYPE(raw_stream_type_value)
md.Location = MINIDUMP_LOCATION_DESCRIPTOR.parse(buff)
return md
def __parse_directories(self):
for dir in self.directories:
if dir.StreamType == MINIDUMP_STREAM_TYPE.UnusedStream:
logging.debug('Found UnusedStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
continue # Reserved. Do not use this enumeration value.
elif dir.StreamType == MINIDUMP_STREAM_TYPE.ReservedStream0:
logging.debug('Found ReservedStream0 @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
continue # Reserved. Do not use this enumeration value.
elif dir.StreamType == MINIDUMP_STREAM_TYPE.ReservedStream1:
logging.debug('Found ReservedStream1 @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
continue # Reserved. Do not use this enumeration value.
elif dir.StreamType == MINIDUMP_STREAM_TYPE.ThreadListStream:
logging.debug('Found ThreadListStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.threads = MinidumpThreadList.parse(dir, self.file_handle)
continue
elif dir.StreamType == MINIDUMP_STREAM_TYPE.ModuleListStream:
logging.debug('Found ModuleListStream @%x Size: %d' % (dir.Location.Rva, dir.Location.DataSize))
self.modules = MinidumpModuleList.parse(dir, self.file_handle)
#logging.debug(str(modules_list))
def create_streams(self):
sysinfo = self.sysreader.get_sysinfo()
self.streams[MINIDUMP_STREAM_TYPE.SystemInfoStream] = sysinfo
print(str(sysinfo))
moduleinfo = self.sysreader.get_modules()
self.streams[MINIDUMP_STREAM_TYPE.ModuleListStream] = moduleinfo
sections = self.sysreader.get_sections()
self.streams[MINIDUMP_STREAM_TYPE.MemoryInfoListStream] = sections
self.finalize_header()
memory = self.sysreader.get_memory()
def parse(buff):
raw_stream_type_value = MINIDUMP_DIRECTORY.get_stream_type_value(buff)
# StreamType value that are over 0xffff are considered MINIDUMP_USER_STREAM streams
# and their format depends on the client used to create the minidump.
# As per the documentation, this stream should be ignored : https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ne-minidumpapiset-minidumminidump_dirp_stream_type#remarks
is_user_stream = raw_stream_type_value > MINIDUMP_STREAM_TYPE.LastReservedStream.value
is_stream_supported = raw_stream_type_value in MINIDUMP_STREAM_TYPE._value2member_map_
if is_user_stream and not is_stream_supported:
return None
md = MINIDUMP_DIRECTORY()
md.StreamType = MINIDUMP_STREAM_TYPE(raw_stream_type_value)
md.Location = MINIDUMP_LOCATION_DESCRIPTOR.parse(buff)
return md