咱們已經瞭解了什麼是Dump文件,它保存了什麼數據,有什麼做用,但它是如何存儲的,數據格式是怎樣的呢。下面簡單說一下。數組
1、整體結構數據結構
2、文件頭spa
首先文件的最開始的32個字節是Dump文件的文件頭,這裏包含了Dump文件標識、格式版本、校驗和、時間戳和一些標誌,數據結構以下3d
typedef struct _MINIDUMP_HEADER {
code
ULONG32 Signature; ULONG32 Version; ULONG32 NumberOfStreams; RVA StreamDirectoryRva; ULONG32 CheckSum; union { ULONG32 Reserved; ULONG32 TimeDateStamp; }; ULONG64 Flags;
} MINIDUMP_HEADER, *PMINIDUMP_HEADER
上面的結構包含了不少信息,總共32個字節,存放在文件的最開始的位置,下面分別說下各成員:blog
StreamDirectoryRva
(字節)3、流目錄ip
文件頭事後緊接着的是流目錄。經過文件頭裏的StreamDirectoryRVA字段決定咱們能夠快速定位到流目錄在文件裏的位置。
內存
咱們能夠看到流目錄緊挨着文件頭的尾部。
流目錄記錄內存數據的流的摘要數據組成的數組,方便解析器進行解析和數據定位。數組元素由以下結構填充:字符串
typedef struct _MINIDUMP_DIRECTORY { ULONG32 StreamType; MINIDUMP_LOCATION_DESCRIPTOR Location; } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY;
StreamType---流類型
這是一個4字節的MINIDUMP_STREAM_TYPE枚舉類型的數據
typedef enum _MINIDUMP_STREAM_TYPE { UnusedStream, ReservedStream0, ReservedStream1, ThreadListStream, ModuleListStream, MemoryListStream, ExceptionStream, SystemInfoStream, ThreadExListStream, Memory64ListStream, CommentStreamA, CommentStreamW, HandleDataStream, FunctionTableStream, UnloadedModuleListStream, MiscInfoStream, MemoryInfoListStream, ThreadInfoListStream, HandleOperationListStream, TokenStream, JavaScriptDataStream, SystemMemoryInfoStream, ProcessVmCountersStream, IptTraceStream, ThreadNamesStream, ceStreamNull, ceStreamSystemInfo, ceStreamException, ceStreamModuleList, ceStreamProcessList, ceStreamThreadList, ceStreamThreadContextList, ceStreamThreadCallStackList, ceStreamMemoryVirtualList, ceStreamMemoryPhysicalList, ceStreamBucketParameters, ceStreamProcessModuleMap, ceStreamDiagnosisList, LastReservedStream } MINIDUMP_STREAM_TYPE;
MINIDUMP_LOCATION_DESCRIPTOR
來描述的,包含流數據大小和文件偏移地址typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { ULONG32 DataSize; RVA Rva; } MINIDUMP_LOCATION_DESCRIPTOR;
經過上面的相關結構,咱們能夠得出,一個流目錄項總供有12個字節,那麼有多少個項呢,由文件頭裏的字段NumberOfStreams
給出,好比it
咱們就能夠知道,流目錄的大小=sizeof(MINIDUMP_DIRECTORY
)*MINIDUMP_HEADER
::NumberOfStreams。這個文件裏的流目錄的大小=12*17=204B
----未完待續