Got it. From what you pasted, the “not working” dump isn’t just random—it looks like
a 2-byte/word swap and mirrored blocks:
1) At
0x00000830, the first 3 bytes swap position-wise in a repeating pattern:
- working:
86 FC F6 18 7B D7 0F DE ...
- not working:
7B D7 F6 18 86 FC 0F DE ...
This is exactly what you get when some region gets rotated by 2-byte words (or a block of 2 bytes swapped with another word pair).
2) Same pattern at
0x00000848,
0x00000860,
0x00000894,
0x00000AB8,
0x00000AD0, etc.:
- working
36 90 8E 65 ...
- not working
3D F9 8E 65 36 90 ...
So it’s consistent:
words/pairs are being rearranged, not just corrected.
3) At
0x00000A68:
- working:
02 12 F0 F0 F0 F0 F0 F0
- not working:
F0 12 02 F0 F0 F0 F0 F0
So even the “header-like” bytes
02 12 moved by 1–2 byte positions relative to the
F0 padding.
4) At
0x00000D4C:
- working:
02 12 F0 F0
- not working:
F0 12 02 F0
Again: the same
02 12 pair slid to the “right” by a byte/word boundary.
This strongly indicates your 4KB “dumb” editing likely swapped/copied the
wrong alignment (off by 1 byte / 2 bytes), or you swapped Slot1↔Slot3 using a mapping that assumes a different internal layout (or you used an editor operation that swaps endianness / word order).
What I need to tell you the exact correct fix (alignment + slot mapping):
Please provide:
1) Vehicle/ECU side identifiers:
- BMW model + year + engine (or at least: CAS3+ generation)
- CAS3+ HW/SW: (e.g. HW: C4, SW: 21.x) if known
2) For your 4KB region: which bytes you treated as “Slot 1” and “Slot 3” (start offset and length you copied in HxD).
Quick check you can do now (2 minutes):
In HxD, find the first difference offset you listed:
0x00000830.
Copy 32 bytes from both files starting at
0x00000820 (include bytes before the first diff), paste them here.
Example format:
Offset
00000820
Working:
.. .. .. ... (32 bytes)
Not working:
.. .. .. ... (32 bytes)
With that, I can determine whether the correct operation is:
- byte-align shift (move everything by +1 byte)
- word-align shift (swap every 2 bytes)
- or block swap (Slot1/Slot3 region boundaries are wrong by N bytes)
Send that
0x00000820 32-byte snippet + your Slot1/Slot3 copy offsets, and I’ll tell you precisely what to change.