The logic for fieldOffsetsArePointers was always reading 32-bit units even on 64-bits. When fieldOffsetsArePointers is true, fieldOffsets is declared as int32_t**, so each element *must* be a pointer and therefore word-sized (64 bits on 64-bit machines). So it doesn't make sense to only read 32-bit words for this test. This fixes metadata extraction for 64-bit builds from Il2Cpp versions 5.3.7f1, 5.3.8f2, 5.4.1f1, 5.4.2f2, 5.4.3f1, 5.4.4f1, 5.4.5f1 and 5.4.6f3. Notably, 5.4.0f3 is an unusual outlier which uses int32_t * for fieldOffsets.
14 KiB
14 KiB