(25.07.2024 11:46)XEPOMAHT Wrote: Вчерашняя версия era.dll 3.9.15 портит (или не даёт записывать) структуру видеоролика по адресу 694D00h из-за чего становится невозможно воспроизведение вступительных роликов перед главным меню (т.к. исходных кодов от плагина Video playback in BIK format.dll у меня нет, чтобы исправить конфликт хуков с era.dll). В общем опять ERA+ остётся на era.dll версии 3.9.14.
Причина: автор ЭРА решил оптимизировать хук в экзешнике, а плагин BIK не сталкивался с разновидностью ассемблера из era.dll и не переписывает закрытый вызов API из era.dll =). А в версиях 3.9.14 и 3.9.15 в процедуре Hook_OpenBik - без изменений в ассемблере, кроме в 3.0.
Было:
Code:
Core.Hook(Ptr($44D270), Core.HOOKTYPE_BRIDGE, @Hook_OpenBik);
https://github.com/ethernidee/b2/blob/7c...e.pas#L440
Стало: ЭРА начиная с версий 3.9.15 (24.07.2024)
Code:
ApiJack.HookCode(Ptr($44D270), @Hook_OpenBik);
https://github.com/ethernidee/b2/blob/ma...k.pas#L347
В ассемблере:
Code:
05D03FF8 | 60 | pushad
05D03FF9 | 54 | push esp
05D03FFA | B8 98B81505 | mov eax,era.515B898
05D03FFF | FFD0 | call eax
05D04001 | 85C0 | test eax,eax
05D04003 | 74 10 | je 5D04015
05D04005 | 61 | popad
05D04006 | 83C4 04 | add esp,4
05D04009 | 55 | push ebp
05D0400A | 8BEC | mov ebp,esp
05D0400C | 83EC 28 | sub esp,28
05D0400F | 68 75D24400 | push h3era hd.44D275
05D04014 | C3 | ret
05D04015 | 61 | popad
05D04016 | C3 | ret
Новая версия ЭРА 3.9.15
Code:
05933CB0 | 60 | pushad
05933CB1 | 54 | push esp
05933CB2 | E8 69BC31FF | call era.4C4F920
05933CB7 | 85C0 | test eax,eax
05933CB9 | 0F84 0F000000 | je 5933CCE
05933CBF | 61 | popad
05933CC0 | 83C4 04 | add esp,4
05933CC3 | 55 | push ebp
05933CC4 | 8BEC | mov ebp,esp
05933CC6 | 83EC 28 | sub esp,28
05933CC9 | E9 A895B1FA | jmp h3era hd.44D276
05933CCE | 61 | popad
05933CCF | C3 | ret
В будущем, вдруг кто-то захочет улучшить оптимизацию хука назовёт ApiJack.HookCodeNoReturnResult
push ecx
push esp
call era.4C4F920
pop ecx
push ebp
mov ebp,esp
sub esp,28
jmp 44D275
А затем захочет убрать лишние push esp.
push ecx
call 0x04C4F920
pop ecx
push ebp
mov ebp,esp
sub esp,28
jmp h3era hd.44D276
В плагине BIK 1.6.2 уже добавил совместимость см.выше, предусмотрено на будущее, на всякий случай =).
Скачать плагин "Воспроизведение видео в формате BIK" 1.6.2 :
ИСТОРИЯ ИЗМЕНЕНИЙ ВЕРСИЙ
Версия 1.6.2
7.08.2024
1)Исправлен мой баг: не воспроизводить видео формата ".smk", типа: кампания, конец игры... (причина: в плагине BIK начиная с 1.6 оптимизирована строка ".smk" в ассемблере. Поэтому ЭРА видит чужеродный адрес в строке из плагина xD!.)
2)Изменение исходных кодов в ассемблере: сохранить файл ANSI на UTF8.
Импорт процедуры с заменой MessageBoxA на MessageBoxW.
3)Добавлена совместимость, на всякий случай, если кто в будущем будет оптимизировать хук в экзешнике, например, появится ЭРА версии 4.Х =).
Версия 1.6
07.08.2024
1)Добавлена поддержка Эры начиная с версии 3.9.15.
Причина несовместимости:
У ЭРЫ в новой версии оптимизирован хук
было mov eax,era.4E7B7AC, call eax
стало call era.4C3F82C
2)Реализовал проверку в экзешнике на не совпадение байтов. Если не совпадает, то всплывается диалог "Плагин не совместим" и затем вызвает сбой!.