Anders Melander 1782 Posted May 25, 2023 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
Jan Rysavy 8 Posted May 25, 2023 (edited) 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 May 25, 2023 by Jan Rysavy Share this post Link to post
Jan Rysavy 8 Posted May 25, 2023 (edited) 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 May 25, 2023 by Jan Rysavy Share this post Link to post
Anders Melander 1782 Posted May 25, 2023 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
Jan Rysavy 8 Posted May 25, 2023 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
Anders Melander 1782 Posted May 25, 2023 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
Jan Rysavy 8 Posted May 25, 2023 (edited) 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 May 25, 2023 by Jan Rysavy Share this post Link to post
Anders Melander 1782 Posted May 25, 2023 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
Anders Melander 1782 Posted May 25, 2023 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 Share this post Link to post
Anders Melander 1782 Posted May 25, 2023 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
Jan Rysavy 8 Posted May 25, 2023 29 minutes ago, Anders Melander said: :))))))))))))))))) Share this post Link to post
Jan Rysavy 8 Posted May 25, 2023 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
Anders Melander 1782 Posted May 25, 2023 38 minutes ago, Jan Rysavy said: 1 should mean free block It's an easy fix. I'll do it tomorrow. Thanks. Share this post Link to post
Anders Melander 1782 Posted May 26, 2023 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
Jan Rysavy 8 Posted May 26, 2023 (edited) 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: Success: Edited May 26, 2023 by Jan Rysavy Share this post Link to post
Anders Melander 1782 Posted May 26, 2023 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 🙂 1 Share this post Link to post
Jan Rysavy 8 Posted May 26, 2023 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... 2 Share this post Link to post
Anders Melander 1782 Posted May 26, 2023 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). 1 6 Share this post Link to post
John R. 18 Posted May 26, 2023 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. 2 Share this post Link to post
Attila Kovacs 629 Posted May 26, 2023 @Anders Melander Could you please upload an unfocused build in the coming days. Not urgent. Thanks to both of you, and @Stefan Glienke too, pointing out the sources and that reading the documentgation is of great value 😉 Share this post Link to post
Anders Melander 1782 Posted May 26, 2023 1 minute ago, Attila Kovacs said: Could you please upload an unfocused build in the coming days. Just did: https://bitbucket.org/anders_melander/map2pdb/downloads/ (map2pdb.20230526a-3.0.1.zip) Updating the readme.md now... 1 Share this post Link to post
Jan Rysavy 8 Posted May 26, 2023 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
Jan Rysavy 8 Posted May 26, 2023 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
Anders Melander 1782 Posted May 26, 2023 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