|
@@ -463,3 +463,51 @@ TEST(MinidumpFile, getThreadList) {
|
|
|
EXPECT_EQ(0x08070605u, T.Context.RVA);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+TEST(MinidumpFile, getMemoryList) {
|
|
|
+ std::vector<uint8_t> OneRange{
|
|
|
+ // Header
|
|
|
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
|
|
|
+ 1, 0, 0, 0, // NumberOfStreams,
|
|
|
+ 32, 0, 0, 0, // StreamDirectoryRVA
|
|
|
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0, // Flags
|
|
|
+ // Stream Directory
|
|
|
+ 5, 0, 0, 0, 20, 0, 0, 0, // Type, DataSize,
|
|
|
+ 44, 0, 0, 0, // RVA
|
|
|
+ // MemoryDescriptor
|
|
|
+ 1, 0, 0, 0, // NumberOfMemoryRanges
|
|
|
+ 5, 6, 7, 8, 9, 0, 1, 2, // StartOfMemoryRange
|
|
|
+ 3, 4, 5, 6, 7, 8, 9, 0, // DataSize, RVA
|
|
|
+ };
|
|
|
+ // Same as before, but with a padded memory list.
|
|
|
+ std::vector<uint8_t> PaddedRange{
|
|
|
+ // Header
|
|
|
+ 'M', 'D', 'M', 'P', 0x93, 0xa7, 0, 0, // Signature, Version
|
|
|
+ 1, 0, 0, 0, // NumberOfStreams,
|
|
|
+ 32, 0, 0, 0, // StreamDirectoryRVA
|
|
|
+ 0, 1, 2, 3, 4, 5, 6, 7, // Checksum, TimeDateStamp
|
|
|
+ 0, 0, 0, 0, 0, 0, 0, 0, // Flags
|
|
|
+ // Stream Directory
|
|
|
+ 5, 0, 0, 0, 24, 0, 0, 0, // Type, DataSize,
|
|
|
+ 44, 0, 0, 0, // RVA
|
|
|
+ // MemoryDescriptor
|
|
|
+ 1, 0, 0, 0, // NumberOfMemoryRanges
|
|
|
+ 0, 0, 0, 0, // Padding
|
|
|
+ 5, 6, 7, 8, 9, 0, 1, 2, // StartOfMemoryRange
|
|
|
+ 3, 4, 5, 6, 7, 8, 9, 0, // DataSize, RVA
|
|
|
+ };
|
|
|
+
|
|
|
+ for (ArrayRef<uint8_t> Data : {OneRange, PaddedRange}) {
|
|
|
+ auto ExpectedFile = create(Data);
|
|
|
+ ASSERT_THAT_EXPECTED(ExpectedFile, Succeeded());
|
|
|
+ const MinidumpFile &File = **ExpectedFile;
|
|
|
+ Expected<ArrayRef<MemoryDescriptor>> ExpectedRanges = File.getMemoryList();
|
|
|
+ ASSERT_THAT_EXPECTED(ExpectedRanges, Succeeded());
|
|
|
+ ASSERT_EQ(1u, ExpectedRanges->size());
|
|
|
+ const MemoryDescriptor &MD = ExpectedRanges.get()[0];
|
|
|
+ EXPECT_EQ(0x0201000908070605u, MD.StartOfMemoryRange);
|
|
|
+ EXPECT_EQ(0x06050403u, MD.Memory.DataSize);
|
|
|
+ EXPECT_EQ(0x00090807u, MD.Memory.RVA);
|
|
|
+ }
|
|
|
+}
|