Понял. Судя по тому, что ты прислал, дамп «не работает» выглядит не как случайный набор изменений — похоже на
перестановку 2-байтных слов и зеркальные блоки:
1) В
0x00000830 первые 3 байта циклически меняются местами:
- рабочий:
86 FC F6 18 7B D7 0F DE ...
- не работает:
7B D7 F6 18 86 FC 0F DE ...
Именно это происходит, когда какой-то участок переставляется по 2-байтным словам (или один 2-байтный блок меняется местами с другой парой слов).
2) В
0x00000848,
0x00000860,
0x00000894,
0x00000AB8,
0x00000AD0 и далее наблюдается та же схема:
- рабочий
36 90 8E 65 ...
- не работает
3D F9 8E 65 36 90 ...
То есть всё последовательно:
слова/пары переставляются, а не просто исправляются.
3) В
0x00000A68:
- рабочий:
02 12 F0 F0 F0 F0 F0 F0
- не работает:
F0 12 02 F0 F0 F0 F0 F0
Получается, даже байты, похожие на «заголовок»,
02 12сместились на 1–2 байта относительно
F0 заполнения.
4) В
0x00000D4C:
- рабочий:
02 12 F0 F0
- не работает:
F0 12 02 F0
Опять же: та же
02 12 пара сместилась «вправо» на границу байта/слова.
Это очень похоже на то, что при твоём «тупом» редактировании 4 КБ, скорее всего, операция перестановки/копирования была выполнена с
неправильным выравниванием (сдвиг на 1 или 2 байта), либо ты поменял местами Slot1↔Slot3 по карте, рассчитанной на другую внутреннюю структуру (или использовал операцию редактора, изменившую порядок байтов / слов).
Чтобы точно сказать, как правильно это исправить (выравнивание + соответствие слотов), мне нужно:
Пришли, пожалуйста:
1) Идентификаторы автомобиля/ECU:
- модель BMW + год + двигатель (или хотя бы поколение CAS3+)
- CAS3+ HW/SW: (например, HW: C4, SW: 21.x) если известно
2) Для твоего участка 4KB: какие байты ты считал «Slot 1» и «Slot 3» (начальный offset и длина, которые копировал в HxD).
Быстрая проверка, которую можно сделать прямо сейчас (2 минуты):
В HxD найди первый offset отличия, который ты указал:
0x00000830.
Скопируй из обоих файлов по 32 байта, начиная с
0x00000820 (включая байты перед первым отличием), и вставь их сюда.
Формат, например:
Offset
00000820
Рабочий:
.. .. .. ... (32 байта)
Не работает:
.. .. .. ... (32 байта)
После этого я смогу определить, какая операция нужна:
- сдвиг с выравниванием по байту (переместить всё на +1 байт)
- сдвиг с выравниванием по слову (поменять местами каждые 2 байта)
- или перестановка блока (границы области Slot1/Slot3 смещены на N байт)
Пришли этот
0x00000820 фрагмент из 32 байт и offset копирования Slot1/Slot3 — я точно скажу, что нужно изменить.