少年修仙传客户端基础资源
hch
2024-04-01 d01413b00ef631ac20347716b23818b0b811f65f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#if ENABLE_UNIT_TESTS
 
#include "../../../external/Catch/catch.hpp"
 
#include <sstream>
#include "../../MSVC/MSVCMapFileParser.h"
 
using namespace mapfileparser;
 
static const char* mockMapFile = "\
 _test\n\
\n\
 Timestamp is 5559f772 (Mon May 18 10:30 : 10 2015)\n\
\n\
 Preferred load address is 00400000\n\
\n\
 Start         Length     Name                   Class\n\
 0001:00000000 0096f9beH .text                   CODE\n\
 0001:0096f9c0 00089033H .text$x                 CODE\n\
 0001:009f8a00 00039714H .text$yc                CODE\n\
 0001:00a32120 00000411H .text$yd                CODE\n\
 0002:00000000 00000304H .idata$5                DATA\n\
 0002:00000304 00000004H .CRT$XCA                DATA\n\
 0002:00000308 0000000cH .CRT$XCC                DATA\n\
 0002:00000314 0000001cH .CRT$XCL                DATA\n\
 0002:00000330 000000ecH .CRT$XCU                DATA\n\
 0002:0000041c 00000004H .CRT$XCZ                DATA\n\
 0002:00000420 00000004H .CRT$XIA                DATA\n\
 0002:00000424 00000014H .CRT$XIC                DATA\n\
 0002:00000438 00000004H .CRT$XID                DATA\n\
 0002:0000043c 00000004H .CRT$XIY                DATA\n\
 0002:00000440 00000004H .CRT$XIZ                DATA\n\
 0002:00000444 00000004H .CRT$XPA                DATA\n\
 0002:00000448 00000008H .CRT$XPX                DATA\n\
 0002:00000450 00000004H .CRT$XPXA               DATA\n\
 0002:00000454 00000004H .CRT$XPZ                DATA\n\
 0002:00000458 00000004H .CRT$XTA                DATA\n\
 0002:0000045c 00000004H .CRT$XTZ                DATA\n\
 0002:00000460 0018a7e8H .rdata                  DATA\n\
 0002:0018ac48 0000007bH .rdata$debug            DATA\n\
 0002:0018acc4 00000cd4H .rdata$r                DATA\n\
 0002:0018b9a0 0000f1acH .rdata$sxdata           DATA\n\
 0002:0019ab4c 00000004H .rtc$IAA                DATA\n\
 0002:0019ab50 00000004H .rtc$IZZ                DATA\n\
 0002:0019ab54 00000004H .rtc$TAA                DATA\n\
 0002:0019ab58 00000004H .rtc$TZZ                DATA\n\
 0002:0019ab60 000b6c1cH .xdata$x                DATA\n\
 0002:0025177c 00000078H .idata$2                DATA\n\
 0002:002517f4 00000014H .idata$3                DATA\n\
 0002:00251808 00000304H .idata$4                DATA\n\
 0002:00251b0c 00000bcaH .idata$6                DATA\n\
 0002:002526e0 000016fbH .edata                  DATA\n\
 0003:00000000 0023deb4H .data                   DATA\n\
 0003:0023dec0 0004b020H .bss                    DATA\n\
\n\
  Address         Publics by Value              Rva+Base       Lib:Object\n\
\n\
 0000:00000000       __except_list              00000000     <absolute>\n\
 0000:00003c6b       ___safe_se_handler_count   00003c6b     <absolute>\n\
 0000:00000000       ___ImageBase               00400000     <linker - defined>\n\
 0001:00000000       _StreamingContext__ctor_m12118 00401000 f   98F5E16DA77CA137853023FCE84040FD.obj\n\
 0001:000000d0       _StreamingContext__ctor_m12119 004010d0 f   98F5E16DA77CA137853023FCE84040FD.obj\n\
 0002:00000000       __imp__CryptReleaseContext@8 00e34000     advapi32:ADVAPI32.dll\n\
 0002:00000004       __imp__CryptAcquireContextW@20 00e34004     advapi32:ADVAPI32.dll\n\
 0003:00000000 ??_R0?AUIl2CppExceptionWrapper@@@8 01088000     98F5E16DA77CA137853023FCE84040FD.obj\n\
 0003:00000028 ?Arrays_GenericArrayField_1__ctor_m14458_GenericMethod@@3UIl2CppGenericMethod@@A 01088028     E9FD63517D52C89694E224C19AA23AB9.obj";
 
TEST_CASE("Parsing_MSVC_MapFile_ContainsExpectedSectionsAndSymbols")
{
    std::stringstream ss(mockMapFile);
    MSVCMapFileParser parser;
    MapFile mapFile = parser.Parse(ss);
    REQUIRE(37 == mapFile.sections.size());
 
    Section section = mapFile.sections[0];
    REQUIRE(0x00001000 == section.start);
    REQUIRE(0x0096f9be == section.length);
    REQUIRE(".text" == section.name);
    REQUIRE("1" == section.segmentName);
 
    section = mapFile.sections[4];
    REQUIRE(0x00A34000 == section.start);
    REQUIRE(0x00000304 == section.length);
    REQUIRE(".idata$5" == section.name);
    REQUIRE("2" == section.segmentName);
 
    section = mapFile.sections[36];
    REQUIRE(0x00EC5EC0 == section.start);
    REQUIRE(0x0004b020 == section.length);
    REQUIRE(".bss" == section.name);
    REQUIRE("3" == section.segmentName);
 
    REQUIRE(9 == mapFile.symbols.size());
    Symbol symbol = mapFile.symbols[3];
    REQUIRE(0x00001000 == symbol.start);
    REQUIRE(0x000000d0 == symbol.length);
    REQUIRE(kSegmentTypeCode == symbol.segmentType);
 
    symbol = mapFile.symbols[4];
    REQUIRE(0x000010d0 == symbol.start);
    REQUIRE(0x0096F8EE == symbol.length);
    REQUIRE(kSegmentTypeCode == symbol.segmentType);
 
    symbol = mapFile.symbols[8];
    REQUIRE(0x00C88028 == symbol.start);
    REQUIRE(0x0023DE8C == symbol.length);
    REQUIRE(kSegmentTypeData == symbol.segmentType);
}
 
#endif // ENABLE_UNIT_TESTS