Jump to content
Anders Melander

MAP2PDB - Profiling with VTune

Recommended Posts

50 minutes ago, Stefan Glienke said:

Could the documentation be of any help?

I can't see how. Is there anything, in particular, you're hinting at?

I've read that document many, many times. It's a good starting point but it's very incomplete and, in some cases, plain wrong.

Share this post


Link to post
5 hours ago, Anders Melander said:

If it's blocking the bitmap into qwords then that might be the problem. I'm blocking it into bytes.

 

In memory they are accessing FPM bit-field using QWORDs in x64 and DWORDs in x86, see  Array<native_word> rgw - native_word is defined based on x64/x86 build

 

https://github.com/microsoft/microsoft-pdb/blob/805655a28bd8198004be2ac27e6e0290121a5e89/PDB/msf/msf.cpp#L300

 

#if defined(_M_IA64) || defined(_M_AMD64)
    // REVIEW: ensure that using 64-bit ints on win64 doesn't impact
    // reading/writing pdbs written/read from win32.
    //
    typedef unsigned __int64    native_word;
    enum {
        lgBPW   = 6,
    };
#else
    typedef unsigned long       native_word;
    enum {
        lgBPW   = 5,
    };
#endif

    enum {
        BPW     = sizeof(native_word) * CHAR_BIT,
        iwMax   = ::cbFpmMaxBigMsf/sizeof(native_word),
        BPL     = BPW,
    };

    unsigned    iwMac;      // set to max size of the FPM bit array, based on small or big msfs
    unsigned    iwRover;    // heuristic approach for finding a free page quickly
    CB          cbPg;
    bool        fBigMsf;

    Array<native_word>
                rgw;
    native_word wFill;  

So in our case (x64) lgBPW is 6 and following function

    unsigned mppniw(unsigned pn) {
        return pn >> lgBPW;
    }

is inlined in loc_1800FCE71 as instruction

00007ffa`70fece7c 48c1e806       shr     rax, 6
Edited by Jan Rysavy

Share this post


Link to post
    native_word mppnmask(unsigned pn) {
        return native_word(1) << (pn & (BPW-1));
    }

BPW = sizeof(native_word) * CHAR_BIT, in our (x64) case BPW = 8 * 8 = 0x40

BPW - 1 = 0x3F, another constant from loc_1800FCE71:

 

00007ffa`70fece73 83e03f         and     eax, 3Fh

In loc_1800FCE71 we are ?maybe? looking at inlined (Visual C++ Release build optimization) function isFreePn:

https://github.com/microsoft/microsoft-pdb/blob/805655a28bd8198004be2ac27e6e0290121a5e89/PDB/msf/msf.cpp#L367

 

Edited by Jan Rysavy

Share this post


Link to post
4 hours ago, Jan Rysavy said:

In memory they are accessing FPM bit-field using QWORDs in x64 and DWORDs in x86

Yes. I understood the scheme; I was more concerned about if we are addressing the same bits.

What got me a little confused is that I'm doing a lot of work with big-endian data (TrueType fonts) on another project at the moment where the QWORD/BYTE size would have mattered. However, since we are both using little-endian addressing that's not a problem here.

 

No, I think the problem is that I'm marking a block as allocated even though it's free.
When setting the bits that mark a block as allocated I'm taking advantage of the fact that I have no free blocks in the physical file. I write everything sequentially and only once. Since I keep a count of how many blocks the file contains (that's recorded in the header/superblock at the end), I can simply set the required amount of bits once everything has been written.
One possible problem here is that I might be using the wrong block concept for the block numbers in the bitmap. There are physical blocks that have a direct and linear mapping to their position in the file and then there are logical blocks that exclude stuff like the superblock and the free page maps (FPM). Since the position of the superblock and the FPMs are fixed it would make sense to exclude them from the bitmap (i.e. it maps to logical blocks).

I can try and see if it makes any difference to use logical instead of physical block numbers in the FPM.

 

In your test case, the bit in the MAP2PDB PDB is set (i.e. block is allocated) and in the MSVC PDB the bit is clear (i.e. block not allocated).
We cannot expect the same bits to be set since we are storing different data in the two files, however, since it seems the failure occurs because the bit is set in our file msdia140.dll apparently expect the bit to be clear so the problem must be that I have marked a block as allocated even though it doesn't appear in any stream (or rather in any stream directory).

 

If you can find out where in the PDB file the bit address (i.e. the block number) being tested comes from, I should be able to narrow the cause down even more.

Share this post


Link to post
55 minutes ago, Anders Melander said:

No, I think the problem is that I'm marking a block as allocated even though it's free.

I agree, I came to the same conclusion. Function checkInvariants fails because our FPM bit-field isn't "correct".

 

If you can find out where in the PDB file the bit address (i.e. the block number) being tested comes from, I should be able to narrow the cause down even more.

I don't understand exactly what you mean, can you elaborate on this point? I'd be happy to help...

Share this post


Link to post
1 minute ago, Jan Rysavy said:

I don't understand exactly what you mean, can you elaborate on this point? I'd be happy to help...

Like you did here:

Quote

Another idea: I found what part of PDB they are reading in loc_1800FCE71, instruction mov     rax, qword ptr [r14+rax*8].

It is on offset 0x1008 of attached PDB, see TestMAP2PDB.zip. Does it help?

 

I'm assuming the function that tests the bit is passed a block number which it then translates to an offset into a qword array (BlockNum and (not 63)) and a bit number into the qword (BlockNum and 63). Where does this block number come from?

I.e. if you could apply your magic 🧙 and find out what offset in the PDB file is supplying the block number then we will have a better idea of what the problem is.

Share this post


Link to post

There are these two loops visible in disassembler: https://github.com/microsoft/microsoft-pdb/blob/805655a28bd8198004be2ac27e6e0290121a5e89/PDB/msf/msf.cpp#L1395

 

        fpmInUse.fEnsureRoom(pnMac());
        fpmInUse.clearAll();
        UNSN    snMac = st.snMac();
        for (UNSN sn = 0; sn < snMac; sn++) {
            SI si = st.mpsnsi[sn];
            if (!si.isValid())
                continue;
            for (USPN spn = 0; spn < si.spnMac(lgCbPg()); spn++) {
                UPN pn = si.mpspnpn[spn];
                assert(validPn(pn));
                assert(!fpm.isFreePn(pn));
                assert(!fpmFreed.isFreePn(pn));
                assert(!fpmInUse.isFreePn(pn));
                fpmInUse.freePn(pn);
            }
        }

In our case we fail with sn == 0 (first stream) and spn == 0 (first page of first stream) - we don't repeat any loop.

Edited by Jan Rysavy

Share this post


Link to post
3 hours ago, Jan Rysavy said:

There are these two loops visible in disassembler


assert(validPn(pn));
assert(!fpm.isFreePn(pn));
assert(!fpmFreed.isFreePn(pn));
assert(!fpmInUse.isFreePn(pn));
fpmInUse.freePn(pn);

 

I can't match that with my assumption that I've incorrectly marked a block as allocated (i.e. the corresponding bit is set).

As far as I can tell that code verifies that the block number is valid and that the block is marked as allocated. I have no idea about what the call to FreePn does.

Share this post


Link to post
3 hours ago, Jan Rysavy said:

In our case we fail with sn == 0 (first stream) and spn == 0 (first page of first stream)

By the way, stream #0 is reserved for "a copy of the previous version of the stream directory". It should be empty, so there is no "first page" in it.

 

9 minutes ago, Attila Kovacs said:

free page number

 

image.thumb.png.03bb9de525b97fe58fbad07ed1bd2201.png

Share this post


Link to post
16 minutes ago, Anders Melander said:

By the way, stream #0 is reserved for "a copy of the previous version of the stream directory". It should be empty, so there is no "first page" in it.

Output from : llvm-pdbutil dump -summary -streams -stream-blocks <pdbfile>

                          Summary                           
============================================================
  Block Size: 4096
  Number of blocks: 85
  Number of streams: 47
  Signature: 0
  Age: 1
  GUID: {CDAF4F74-CCFB-6F40-A551-C2BEE853FBEF}
  Features: 0x1
  Has Debug Info: true
  Has Types: true
  Has IDs: true
  Has Globals: true
  Has Publics: true
  Is incrementally linked: false
  Has conflicting types: false
  Is stripped: false


                          Streams                           
============================================================
  Stream  0 (    0 bytes): [Old MSF Directory]
             Blocks: []
  Stream  1 (   75 bytes): [PDB Stream]
             Blocks: [65]
  Stream  2 (   56 bytes): [TPI Stream]
             Blocks: [66]
  Stream  3 ( 5527 bytes): [DBI Stream]
             Blocks: [80, 81]
  Stream  4 (   56 bytes): [IPI Stream]
             Blocks: [82]
  Stream  5 (58764 bytes): [Module "System"]
             Blocks: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
  Stream  6 ( 2392 bytes): [Module "SysInit"]
             Blocks: [19]
  Stream  7 (   56 bytes): [Module "System.Types"]
             Blocks: [20]
  Stream  8 (   64 bytes): [Module "System.UITypes"]
             Blocks: [21]
  Stream  9 ( 1132 bytes): [Module "Winapi.Windows"]
             Blocks: [22]
  Stream 10 (   56 bytes): [Module "System.SysConst"]
             Blocks: [23]
  Stream 11 (   88 bytes): [Module "Winapi.PsAPI"]
             Blocks: [24]
  Stream 12 (   56 bytes): [Module "System.RTLConsts"]
             Blocks: [25]
  Stream 13 (12756 bytes): [Module "System.Character"]
             Blocks: [26, 27, 28, 29]
  Stream 14 (   28 bytes): [Module "System.Internal.ExcUtils"]
             Blocks: [30]
  Stream 15 (24016 bytes): [Module "System.SysUtils"]
             Blocks: [31, 32, 33, 34, 35, 36]
  Stream 16 (  132 bytes): [Module "TestMAP2PDB"]
             Blocks: [37]
  Stream 17 (  248 bytes): [Module "System"]
             Blocks: [38]
  Stream 18 (   72 bytes): [Module "SysInit"]
             Blocks: [39]
  Stream 19 (   72 bytes): [Module "System.UITypes"]
             Blocks: [40]
  Stream 20 (   88 bytes): [Module "Winapi.Windows"]
             Blocks: [41]
  Stream 21 (   72 bytes): [Module "Winapi.PsAPI"]
             Blocks: [42]
  Stream 22 (   72 bytes): [Module "System.Character"]
             Blocks: [43]
  Stream 23 (   64 bytes): [Module "System.Internal.ExcUtils"]
             Blocks: [44]
  Stream 24 (  864 bytes): [Module "System.SysUtils"]
             Blocks: [45]
  Stream 25 (  136 bytes): [Module "TestMAP2PDB"]
             Blocks: [46]
  Stream 26 (   28 bytes): [Module "System"]
             Blocks: [47]
  Stream 27 (   28 bytes): [Module "SysInit"]
             Blocks: [48]
  Stream 28 (   28 bytes): [Module "Winapi.Windows"]
             Blocks: [49]
  Stream 29 (   28 bytes): [Module "System.Internal.ExcUtils"]
             Blocks: [50]
  Stream 30 (   28 bytes): [Module "System.SysUtils"]
             Blocks: [51]
  Stream 31 (   28 bytes): [Module "System"]
             Blocks: [52]
  Stream 32 (   28 bytes): [Module "SysInit"]
             Blocks: [53]
  Stream 33 (   28 bytes): [Module "System.UITypes"]
             Blocks: [54]
  Stream 34 (   28 bytes): [Module "Winapi.Windows"]
             Blocks: [55]
  Stream 35 (   28 bytes): [Module "Winapi.PsAPI"]
             Blocks: [56]
  Stream 36 (   28 bytes): [Module "System.Character"]
             Blocks: [57]
  Stream 37 (   28 bytes): [Module "System.Internal.ExcUtils"]
             Blocks: [58]
  Stream 38 (   28 bytes): [Module "System.SysUtils"]
             Blocks: [59]
  Stream 39 (   28 bytes): [Module "TestMAP2PDB"]
             Blocks: [60]
  Stream 40 (   28 bytes): [Module "System"]
             Blocks: [61]
  Stream 41 (   28 bytes): [Module "System.SysUtils"]
             Blocks: [62]
  Stream 42 (  212 bytes): [Module "* Linker *"]
             Blocks: [63]
  Stream 43 (  436 bytes): [Named Stream "/names"]
             Blocks: [64]
  Stream 44 (30880 bytes): [Symbol Records]
             Blocks: [67, 68, 69, 70, 71, 72, 73, 74]
  Stream 45 (   16 bytes): [Global Symbol Hash]
             Blocks: [75]
  Stream 46 (15288 bytes): [Public Symbol Hash]
             Blocks: [76, 77, 78, 79]

 

Share this post


Link to post

It looks like you are using 1 for used and 0 for free block in FPM.

 

According to https://github.com/microsoft/microsoft-pdb/blob/805655a28bd8198004be2ac27e6e0290121a5e89/PDB/msf/msf.cpp#L367

and https://llvm.org/docs/PDB/MsfFile.html#the-free-block-map

1 should mean free block. See attached stripped_pdb.zip:

 

                       Free Page Map                        
============================================================
Block 1 (
  1000: E080F8FF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1020: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1040: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|

 

stripped_pdb.zip

Share this post


Link to post
38 minutes ago, Jan Rysavy said:

1 should mean free block

doh.png.e9acf21f52c6d3da46e65d19975b1644.png

 

It's an easy fix. I'll do it tomorrow.

Thanks.

Share this post


Link to post

Unfortunately, flipping the meaning of the bit didn't solve the problem. Same error message but it's probably another cause this time.

I have also tried using cvdump and that fails too; Unsurprising since it's also using msdia140.dll.

Share this post


Link to post

Well done, you're only one bit away from success!

 

The checkInvariants function is now definitely different from the GitHub version. For example, they call the FPM::add method to combine two FPMs. And they do other tests that didn't exist in the GitHub version.

 

On offset 0x1000 set bit 0x00000008:

bit.thumb.png.17c879aaa68f77d15af3cbd254d38935.png

 

Success:

success.thumb.png.5ba3dde0aa47561240e721116fa8f724.png

 

checkInvariants.png

Edited by Jan Rysavy

Share this post


Link to post
13 minutes ago, Jan Rysavy said:

Well done, you're only one bit away from success!

On offset 0x1000 set bit 0x00000008:

Ah... That must be this block:

  // Write an empty block just so our layout matches LLVM.
  // This can be removed once our output is validated.
  FWriter.BeginBlock;
  FWriter.Write(Byte(0));
  FWriter.EndBlock;

The block doesn't appear in any stream so it must be marked free. It's block #3 = bit 3 = 0x00000008

I'll try to remove the block instead first. Stay tuned...

 

Btw, I think I now know what checkInvariants is doing.

What threw me was that it appeared to be modifying the FPM and I couldn't understand the purpose of that since it would have made the FPM unusable afterwards. I think it's working on a copy of the FPM; It marks all blocks found in a stream as free (in the FPM copy) and once it has done that for all the streams it checks if all blocks are now marked free.

 

And well done, yourself!

 

This looks interesting 🙂

image.png.6e2228722cb19dec14e22aefc736a1fc.png

  • Thanks 1

Share this post


Link to post
1 minute ago, Anders Melander said:

Btw, I think I now know what checkInvariants is doing.

What threw me was that it appeared to be modifying the FPM and I couldn't understand the purpose of that since it would have made the FPM unusable afterwards. I think it's working on a copy of the FPM; It marks all blocks found in a stream as free (in the FPM copy) and once it has done that for all the streams it checks if all blocks are now marked free.

Exactly, I saw it in debugger...

  • Thanks 2

Share this post


Link to post

Success! Pushed and merged to master.

Thank you to all that helped. You really saved me a lot of time. Especially since I was pretty unfocused and preoccupied (new job, lots of other projects, summer finally arrived).

  • Like 1
  • Thanks 6

Share this post


Link to post
2 minutes ago, Anders Melander said:

Success! Pushed and merged to master. 

Thank you to all that helped. You really saved me a lot of time. Especially since I was pretty unfocused and preoccupied (new job, lots of other projects, summer finally arrived). 

Congrats! Fantastic work to both of you. Thank you.

Even though it is high above my knowledge, it is a pleasure following this thread between @Jan Rysavy and @Anders Melander. I'm glad that such knowledgable people are still part of the Delphi community and hope that this project will get sponsored by Embarcadero somehow. Thanks again.

  • Like 2

Share this post


Link to post

Unfortunately, there seems to be another problem:

 

                          Summary                           
============================================================
  Block Size: 4096
  Number of blocks: 1250
  Number of streams: 648
  Signature: 0
  Age: 1
  GUID: {C56191BB-2E54-49D9-AEF4-8A1A80A664CF}
  Features: 0x1
  Has Debug Info: true
  Has Types: true
  Has IDs: true
  Has Globals: true
  Has Publics: true
  Is incrementally linked: false
  Has conflicting types: false
  Is stripped: false


                          Streams                           
============================================================
  Stream   0 (      0 bytes): [Old MSF Directory]
              Blocks: []
  Stream   1 (     75 bytes): [PDB Stream]
              Blocks: [901]
  Stream   2 (     56 bytes): [TPI Stream]
              Blocks: [902]
  Stream   3 (  84775 bytes): [DBI Stream]
              Blocks: [1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245]
  Stream   4 (     56 bytes): [IPI Stream]
              Blocks: [1246]
  Stream   5 (     28 bytes): [Module "System"]
              Blocks: [4]
  Stream   6 (   2392 bytes): [Module "SysInit"]
              Blocks: [5]
  Stream   7 (     28 bytes): [Module "System.Types"]
              Blocks: [6]
  Stream   8 (     28 bytes): [Module "System.UITypes"]
              Blocks: [7]
  Stream   9 (   7520 bytes): [Module "Winapi.Windows"]
              Blocks: [8, 9]
  Stream  10 (     88 bytes): [Module "Winapi.PsAPI"]
....
  Stream 643 (    212 bytes): [Module "* Linker *"]
              Blocks: [898]
  Stream 644 (   4831 bytes): [Named Stream "/names"]
              Blocks: [899, 900]
  Stream 645 (1015700 bytes): [Symbol Records]
              Blocks: [903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150]
  Stream 646 (     16 bytes): [Global Symbol Hash]
              Blocks: [1151]
  Stream 647 ( 296012 bytes): [Public Symbol Hash]
              Blocks: [1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224]



                       Free Page Map                        
============================================================
Block 1 (
  1000: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1020: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1040: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1060: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1080: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  10A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  10C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  10E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1100: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1120: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
...
  1F60: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1F80: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1FA0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1FC0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1FE0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
)



                        Stream Data                         
============================================================
  Stream 0: Old MSF Directory (dumping 0 / 0 bytes)
    Data (
    )
  Stream 1: PDB Stream (dumping 75 / 75 bytes)
    Data (
      385000: 942E3101 00000000 01000000 BB9161C5 542ED949 AEF48A1A 80A664CF 07000000  |..1...........a.T..I......d.....|
      385020: 2F6E616D 65730001 00000002 00000001 00000002 00000000 00000000 00000084  |/names..........................|
      385040: 02000000 00000041 913201                                                 |.......A.2.|
    )
  Stream 2: TPI Stream (dumping 56 / 56 bytes)
    Data (
      386000: 0BCA3101 38000000 00100000 00100000 00000000 FFFFFFFF 04000000 FFFF0300  |..1.8...........................|
      386020: 00000000 00000000 00000000 00000000 00000000 00000000                    |........................|
    )

 

Share this post


Link to post

I'm sorry, it works now, probably user error on my side.

                       Free Page Map                        
============================================================
Block 1 (
  1000: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
  1020: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
  1040: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
  1060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
  1080: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 FEFFFFFF  |................................|
  10A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  10C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  10E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
  1100: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|

 

Share this post


Link to post
1 hour ago, Jan Rysavy said:

probably user error on my side.

Yes, it looks like you used the old version (I hope 🙂).

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×