Current time: 22.04.2024, 06:51 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
ERA II
» WoG Era 2: Русская и Английская версии
Author Message
Berserker Offline
Administrators

Posts: 16488
Post: #2476

Исправил Ab
Хранилище для актуальной версии DLL

Один минус — в очень редких случаях MR:N может вернуть -1.
09.11.2017 03:46
Find all posts by this user Quote this message in a reply
SyDr Offline

Posts: 1052
Post: #2477

Берс в теме Era II 119
09.11.2017 09:47
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2478

Я тоже рад тебя видеть Rolleyes
09.11.2017 16:10
Find all posts by this user Quote this message in a reply
Algor Away
Administrators

Posts: 3880
Post: #2479

Появилось свободное время? 102
Berserker, ты развелся или в роддом жену отправил?


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
09.11.2017 16:16
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2480

Есть немного, стараюсь использовать с пользой Sm)
У жены тоже хобби есть, так что всё в порядке Sorry
09.11.2017 17:31
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #2481

(09.11.2017 03:46)Berserker Wrote:  Исправил Ab
Хранилище для актуальной версии DLL

Один минус — в очень редких случаях MR:N может вернуть -1.
Berserker, а это 2,46 исправленная, или же 2,47?
(This post was last modified: 10.11.2017 03:20 by Bes.)
10.11.2017 03:19
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2482

2.47.2, если не ошибаюсь, самая последняя.
DLL Releases - Latest
10.11.2017 03:48
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2483

Написал на PHP инструмент для компиляции map-файлов (файлов с именами и адресами идентификаторов: переменных, функций, классов и их адресов в исполняемых модулях) в двоичные упорядоченные по возрастания адресов (для бинарного поиска) .dbgmap-файлы со следующей структурой:
Code:
/**
* [0] Labels section
* [4] Number of labels
*   > Repeat "Number of labels" times
*   [4] Label address
*   [4] Label name length
*   [...] Label name
* [0] Modules section (program modules = source code containers, used in line numbers tracking, example: "stdio.c")
* [4] Number of modules
*   > Repeat "Number of modules" times
*   [4] Module name length
*   [...] Module name
* [0] Line numbers section
* [4] Number of line numbers
*   > Repeat "Number of line numbers" times
*   [4] Address of code/data
*   [4] Module index (from modules table, starting from zero)
*   [4] Line number
*
* All addresses are relative to PE image base. Ex. for 0x401000 absolute address and 0x400000 image
* base, relative address will be 0x001000.
*/

Следующий шаг — научить Эру загружать эти файлы по требованию и в отчётах об исключениях и обработчиках событий применять его при генерации человеко-читаемых адресов. Результат должен изрядно помогать в поиске источников вылетов как в оригинальном файле h3te, так и в Эре и любых пользовательских плагинах, для которых компилятор поддерживает генерацию map-файлов.

На текущий момент у меня есть актуальный map для era.dll (генерируется при компиляции) и h3hota.map от Сава (несколько лет назад попросил), который я почищу скриптом от бессмысленных идентификаторов и планирую таки использовать, хотя покрытие кода метками там и невелико.

Оригиналы map-файлов (почищенные), dbgmap-файлы и сами инструменты можно отыскать всё в том же хранилище Эры
11.11.2017 03:21
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2484

Реализовал. Господа, зацените. Адреса для dll/exe с отладочными картами заиграли новыми красками:

Code:
> Event handlers

$OnBeforeResetErmFunc:
  Era.3E86C (PoTweak.OnBeforeResetErmFunc in PoTweak.pas on line 117)
OnAfterBattleAction:
  Yona.1A918
OnAfterLoadGame:
  Yona.1C10C
OnAfterWoG:
  Era.2CC90 (Stores.OnAfterWoG in Stores.pas on line 432)
  Era.303D4 (AdvErm.OnAfterWoG in AdvErm.pas on line 1511)
  Era.339F4 (Erm.OnAfterWoG in Erm.pas on line 1765)
  Era.37604 (Lodman.OnAfterWoG in Lodman.pas on line 446)
  Era.3A1F4 (Tweaks.OnAfterWoG in Tweaks.pas on line 734)
  Era.3C9B0 (Rainbow.OnAfterWoG in Rainbow.pas on line 579)
  Era.3E468 (Triggers.OnAfterWoG in Triggers.pas on line 510)
  Era.3E878 (PoTweak.OnAfterWoG in PoTweak.pas on line 122)
  Era.3F508 (SndVid.OnAfterWoG in SndVid.pas on line 426)
  Era.3FCEC (EraButtons.OnAfterWoG in EraButtons.pas on line 191)
OnBattleMouseHint:
  Yona.19C84
OnBattleRound:
  Yona.18F38
OnBattleScreenMouseClick:
  Yona.1A6DC
OnBeforeBattleAction:
  Yona.1A8A0
OnBeforeBattleUniversal:
  Yona.1AA2C
OnBeforeErm:
  Era.33934 (Erm.OnBeforeErm in Erm.pas on line 1752)
OnBeforeErmInstructions:
  Era.303EC (AdvErm.OnBeforeErmInstructions in AdvErm.pas on line 1520)
  Era.373E0 (Lodman.OnBeforeErmInstructions in Lodman.pas on line 392)
  Yona.1C10C
OnBeforeTrigger:
  Era.3CB40 (Triggers.OnBeforeTrigger in Triggers.pas on line 94)
OnBeforeWoG:
  Era.303B8 (AdvErm.OnBeforeWoG in AdvErm.pas on line 1504)
  Era.339D4 (Erm.OnBeforeWoG in Erm.pas on line 1759)
  Era.375BC (Lodman.OnBeforeWoG in Lodman.pas on line 435)
  Wog_patcherizer.1330
OnEraStart:
  Era.40BD4 (EraSettings.OnEraStart in EraSettings.pas on line 80)
OnGenerateDebugInfo:
  Era.3037C (AdvErm.OnGenerateDebugInfo in AdvErm.pas on line 1499)
  Era.33928 (Erm.OnGenerateDebugInfo in Erm.pas on line 1744)
  Era.3A1D8 (Tweaks.OnGenerateDebugInfo in Tweaks.pas on line 718)
  Era.2B850 (GameExt.OnGenerateDebugInfo in GameExt.pas on line 466)
OnKeyPressed:
  Yona.1A530
OnMonsterPhysicalDamage:
  Yona.1A924
OnSavegameRead:
  Era.2EF1C (AdvErm.OnSavegameRead in AdvErm.pas on line 1067)
  Era.3369C (Erm.OnSavegameRead in Erm.pas on line 1661)
  Era.374C4 (Lodman.OnSavegameRead in Lodman.pas on line 417)
  Era.3E828 (PoTweak.OnSavegameRead in PoTweak.pas on line 110)
OnSavegameWrite:
  Era.2EA78 (AdvErm.OnSavegameWrite in AdvErm.pas on line 917)
  Era.335B8 (Erm.OnSavegameWrite in Erm.pas on line 1639)
  Era.373F4 (Lodman.OnSavegameWrite in Lodman.pas on line 397)
  Era.3E7E8 (PoTweak.OnSavegameWrite in PoTweak.pas on line 104)
OnStackToStackDamage:
  Yona.18F58
OnTrigger 89999:
  Yona.1AA4C
11.11.2017 19:52
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #2485

по мне как был тёмный лет, так он и остался 96-copy
11.11.2017 20:23
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2486

Обновил GitHub-репозиторий и Яндекс-диск.

Бес, это как если на месте ошибочной ЕРМ команды тебе бы игра писала: ошибка по адресу 12345ADEBBA, а ты бы гадал, что это за место. А после, как в Эре 2.47+, писалось бы:
> ERA version: 2.47.2
> ERM context in era - quick savings.erm:95:15

Это сразу понятнее. Файл era - quick savings.erm, строка 95, позиция 15. Для скомпилированного кода такой магии не было (была, но ручная и в отладчике). Теперь есть Ab
11.11.2017 21:33
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2487

Добавил генерацию mod list.txt в Debug-папке по F11 или вылету. Достаточно будет одной папки в архиве от игрока для анализа ситуации.
11.11.2017 22:09
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2488

Сделал отладочную карту для angel.dll (Era 1.x) и добавил анализ данных (число, строка?) в файл с дампом контекста исключения. Пример вылета:


Angel.10BA (Main.CallProc + 102) - значит кто-то вызвал SN:E. Об этом же подозрительно напоминает и:

00289490: 0CC9E3DD (int: 214557661, pint: 0x2F317945 = 791771461, str: "Ey1/0/y1;

Нет стека вызовов — произошёл переход на левый адрес с данными, не принадлежащими ни одному модулю.
12.11.2017 00:10
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2489

А вот другой вылет:
Функция обработки сообщений окна, перехваченная Эрой, вызывает обычную геройскую функцию обработки сообщений, дело доходит до менеджера приключений, который обрабатывает правый щелчок мышью. Получает управления WoG (4 верхний адреса в стеке вызовов), где одна из вредных команд и производит вылет.

Какая? erm memory dump.txt

Code:
> ERA version: 2.47.2

> ERM context in 1 wog - cheat menu.erm:3:7

!!UN:C0/1/7;
12.11.2017 00:17
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16488
Post: #2490

Добавил отладочную карту для Yona. Теперь в обработчиках событий сплошная красота:

Code:
$OnBeforeResetErmFunc:
  Era.3EB9C (PoTweak.OnBeforeResetErmFunc in PoTweak.pas on line 117)
OnAfterBattleAction:
  Yona.1ABBC (Yo.OnAfterBattleAction in Yo.pas on line 994)
OnAfterLoadGame:
  Yona.1C3D8 (YoDescs.OnGameStartOrLoad in YoDescs.pas on line 195)
OnAfterWoG:
  Era.2CF88 (Stores.OnAfterWoG in Stores.pas on line 432)
  Era.306CC (AdvErm.OnAfterWoG in AdvErm.pas on line 1511)
  Era.33CFC (Erm.OnAfterWoG in Erm.pas on line 1765)
  Era.3790C (Lodman.OnAfterWoG in Lodman.pas on line 446)
  Era.3A524 (Tweaks.OnAfterWoG in Tweaks.pas on line 734)
  Era.3CCE0 (Rainbow.OnAfterWoG in Rainbow.pas on line 579)
  Era.3E798 (Triggers.OnAfterWoG in Triggers.pas on line 510)
  Era.3EBA8 (PoTweak.OnAfterWoG in PoTweak.pas on line 122)
  Era.3F838 (SndVid.OnAfterWoG in SndVid.pas on line 426)
  Era.4001C (EraButtons.OnAfterWoG in EraButtons.pas on line 191)
OnBattleMouseHint:
  Yona.19F24 (Yo.OnBattleMouseHint in Yo.pas on line 672)
OnBattleRegeneratePhase:
  Yona.1ABC8 (Yo.OnBattleRegeneratePhase in Yo.pas on line 1016)
OnBattleRound:
  Yona.191D8 (Yo.OnBattleRound in Yo.pas on line 377)
OnBattleScreenMouseClick:
  Yona.1A97C (Yo.OnBattleScreenMouseClick in Yo.pas on line 933)
OnBeforeBattleAction:
  Yona.1AB40 (Yo.OnBeforeBattleAction in Yo.pas on line 982)
OnBeforeBattleUniversal:
  Yona.1ACF8 (Yo.OnBeforeBattleUniversal in Yo.pas on line 1065)
  Yona.1ACF8 (Yo.OnBeforeBattleUniversal in Yo.pas on line 1065)
OnBeforeErm:
  Era.33C3C (Erm.OnBeforeErm in Erm.pas on line 1752)
OnBeforeErmInstructions:
  Era.306E4 (AdvErm.OnBeforeErmInstructions in AdvErm.pas on line 1520)
  Era.376E8 (Lodman.OnBeforeErmInstructions in Lodman.pas on line 392)
  Yona.1C3D8 (YoDescs.OnGameStartOrLoad in YoDescs.pas on line 195)
OnBeforeTrigger:
  Era.3CE70 (Triggers.OnBeforeTrigger in Triggers.pas on line 94)
OnBeforeWoG:
  Era.306B0 (AdvErm.OnBeforeWoG in AdvErm.pas on line 1504)
  Era.33CDC (Erm.OnBeforeWoG in Erm.pas on line 1759)
  Era.378C4 (Lodman.OnBeforeWoG in Lodman.pas on line 435)
  Wog_patcherizer.1330
OnEraStart:
  Era.40F04 (EraSettings.OnEraStart in EraSettings.pas on line 80)
OnGenerateDebugInfo:
  Era.30674 (AdvErm.OnGenerateDebugInfo in AdvErm.pas on line 1499)
  Era.33C30 (Erm.OnGenerateDebugInfo in Erm.pas on line 1744)
  Era.3A508 (Tweaks.OnGenerateDebugInfo in Tweaks.pas on line 718)
  Era.2BB44 (GameExt.OnGenerateDebugInfo in GameExt.pas on line 472)
OnKeyPressed:
  Yona.1A7D0 (Yo.OnKeyPressed in Yo.pas on line 877)
OnMonsterPhysicalDamage:
  Yona.1ABF0 (Yo.OnMonsterPhysicalDamage in Yo.pas on line 1032)
OnSavegameRead:
  Era.2F214 (AdvErm.OnSavegameRead in AdvErm.pas on line 1067)
  Era.339A4 (Erm.OnSavegameRead in Erm.pas on line 1661)
  Era.377CC (Lodman.OnSavegameRead in Lodman.pas on line 417)
  Era.3EB58 (PoTweak.OnSavegameRead in PoTweak.pas on line 110)
OnSavegameWrite:
  Era.2ED70 (AdvErm.OnSavegameWrite in AdvErm.pas on line 917)
  Era.338C0 (Erm.OnSavegameWrite in Erm.pas on line 1639)
  Era.376FC (Lodman.OnSavegameWrite in Lodman.pas on line 397)
  Era.3EB18 (PoTweak.OnSavegameWrite in PoTweak.pas on line 104)
OnStackToStackDamage:
  Yona.191F8 (Yo.OnStackToStackDamage in Yo.pas on line 423)
OnTrigger 89999:
  Yona.1AD18 (Yo.OnNet in Yo.pas on line 1072)
12.11.2017 02:31
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group