Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Редактирование ресурсов и кода игры

Не запускается игра? Проблемы со звуком? Где, в конце концов, взять игру, скачать патчи, приложения и карты? Как установить все это? Все проблемы обсуждаем в этом разделе
offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение t800 » 11 авг 2015, 10:43

И еще вопрос? А нельзя в самом дебагере както изменять команды? Остановил по BP посмотрел какие команды идут. Изменил их. Нажать F5 на продолжение игры и посмотреть что получилось. :smile1: Тогда было проще понять какая команда че делает.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5229
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2030 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 11 авг 2015, 12:28

Цитата:
Тогда было проще понять какая команда че делает.

Какая команда что делает и так понятно :) Для этого существуют справочники по ассемблеру.

Для того, чтобы найти адрес таблицы, нам придётся отследить весь путь. Итак, идём по коду снизу вверх:

1. mov [ecx+esi], dl
Эта команда записывает ID монстра, которое находится в регистре dl, в структуру героя (в esi - "адрес" армии героя, в ecx - номер слота). Раз нас интересует ID (ведь именно его мы хотим поменять, чтобы в жилище нанимались новые монстры), а оно хранится в регистре dl, то в наших же интересах выяснить, а как, собственно, ID туда попадает?

2. mov dl, [esp]
Вот так и попадает. Идём дальше.

3. mov [esp], edx
Видим, что ID монстра передаётся через регистр edx в качестве аргумента функции, которая добавляет монстров из внешнего двеллинга в армию героя, т.е. реализует функционал найма монстров из внешнего жилища. Если ещё не понятно, то внутри этой функции мы сейчас как раз и находимся. См. Ваш дамп: seg000:0000B10B call sub_1526A

4. mov edx, [ebx+ebp-30h]
А в регистр edx ID попадает из локального массива [ebp-30h], где ebx - это индекс элемента в этом массиве. Поднимаемся ещё выше...

5. ...и выясняем, что в локальный массив ID монстров попадают из таблицы по адресу 2CC208h
Код: Выделить всё
mov     ecx, 0Ah
lea     edi, [ebp-30h]
mov     esi, 2CC208h
rep movsd
Вернуться к началу

offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение t800 » 11 авг 2015, 12:45

Странно у себя не нашел таких команд :smile24:

1. mov [ecx+esi], dl
2. mov dl, [esp]
3. mov [esp], edx

Цитата:
seg000:0000B093 ; ---------------------------------------------------------------------------
seg000:0000B093
seg000:0000B093 loc_B093: ; CODE XREF: seg000:0000B07Cj
seg000:0000B093 mov ecx, 0Ah
seg000:0000B098 lea edi, [ebp-30h]
seg000:0000B09B mov esi, 2CC208h
seg000:0000B0A0 rep movsd
seg000:0000B0A2 push 0FFFFFFFFh
seg000:0000B0A4 push 0
seg000:0000B0A6 push 0FFFFFFFFh
seg000:0000B0A8 push 0
seg000:0000B0AA push 0FFFFFFFFh
seg000:0000B0AC lea edx, [eax+17h]
seg000:0000B0AF mov ecx, 2AC629h
seg000:0000B0B4 mov ebx, 2
seg000:0000B0B9 mov eax, [ebp-34h]
seg000:0000B0BC call sub_A72D
seg000:0000B0C1 mov eax, ds:2DED70h
seg000:0000B0C6 cmp dword ptr [eax+5Ah], 7805h
seg000:0000B0CD jnz loc_9F95
seg000:0000B0D3 mov ebx, [ebp-8]
seg000:0000B0D6 shl ebx, 2
seg000:0000B0D9 mov edx, [ebx+ebp-30h]
seg000:0000B0DD mov esi, [ebp-38h]
seg000:0000B0E0 add esi, 65h ; 'e'
seg000:0000B0E3 mov eax, esi
seg000:0000B0E5 call sub_1520E
seg000:0000B0EA test eax, eax
seg000:0000B0EC jz short loc_B11D
seg000:0000B0EE mov eax, [ebp-3Ch]
seg000:0000B0F1 mov ax, [eax+4]
seg000:0000B0F5 shr ax, 3
seg000:0000B0F9 and eax, 0FFFFh
seg000:0000B0FE mov edx, [ebx+ebp-30h]
seg000:0000B102 mov ecx, 0FFFFFFFFh
seg000:0000B107 mov ebx, eax
seg000:0000B109 mov eax, esi
seg000:0000B10B call sub_1526A
seg000:0000B110 mov eax, [ebp-3Ch]
seg000:0000B113 and word ptr [eax+4], 7
seg000:0000B118 jmp loc_9F95


Нашел только

4. mov edx, [ebx+ebp-30h]

По адресу seg000:0000B0FE mov edx, [ebx+ebp-30h]
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5229
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2030 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 11 авг 2015, 12:51

Цитата:
Странно у себя не нашел таких команд :smile24:

1. mov [ecx+esi], dl
2. mov dl, [esp]
3. mov [esp], edx

Потому что они внутри функции, которая вызывается вот этой командой: call sub_1526A. Кстати, sub_1526A - это имя, которое IDA автоматически назначила функции, и для нашего куска дампа не имеет смысла. Хотя всё-таки попробуйте сделать двойной клик на имени, вдруг код этой функции попал в Ваш дамп. Если нет, то сделайте отдельный дамп этой функции и найдёте в нём эти команды. Возможно, они будут отличаться в Вашей версии.
Вернуться к началу

offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение t800 » 11 авг 2015, 12:58

AlexSpl писал(а):

Цитата:
Странно у себя не нашел таких команд :smile24:

1. mov [ecx+esi], dl
2. mov dl, [esp]
3. mov [esp], edx

Потому что они внутри функции, которая вызывается вот этой командой: call sub_1526A. Кстати, sub_1526A - это имя, которое IDA автоматически назначила функции, и для нашего куска дампа не имеет смысла. Сделайте дамп этой функции и найдёте там эти команды. Возможно, они будут отличаться в Вашей версии.



Те есть мне надо сделать дамп побольше и тогда в IDA вместо появится переход в sub_1526A в которую можно будет попасть по стрелочке и можно будет увидеть mov [ecx+esi], dl mov dl, [esp] и mov [esp], edx ? А насколько дамп больше надо сделать чтобы она влезла?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5229
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2030 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 11 авг 2015, 13:00

А сейчас по двойному клику на sub_1526A разве не переходит? Ну попробуйте memdumpbin cs:200000 40000 тогда.
Вернуться к началу

offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение t800 » 11 авг 2015, 13:18

AlexSpl писал(а):

А сейчас по двойному клику на sub_1526A разве не переходит?


По клику перешла :smile21: Ой а тут много всего :smile8: И кучей стрелок.


Цитата:
seg000:0001526A ; --------------- S U B R O U T I N E ---------------------------------------
seg000:0001526A
seg000:0001526A
seg000:0001526A sub_1526A proc near ; CODE XREF: seg000:0000B10Bp
seg000:0001526A ; seg000:loc_E268p ...
seg000:0001526A
seg000:0001526A var_14 = dword ptr -14h
seg000:0001526A
seg000:0001526A push 14h
seg000:0001526F call near ptr 40BA6h
seg000:00015274 push esi
seg000:00015275 push edi
seg000:00015276 push ebp
seg000:00015277 sub esp, 4
seg000:0001527A mov esi, eax
seg000:0001527C mov [esp+14h+var_14], edx
seg000:0001527F cmp ecx, 0FFFFFFFFh
seg000:00015282 jnz short loc_1529B
seg000:00015284 xor eax, eax
seg000:00015286 mov edi, [esp+14h+var_14]
seg000:00015289 jmp short loc_1528C
seg000:0001528B ; ---------------------------------------------------------------------------
seg000:0001528B
seg000:0001528B loc_1528B: ; CODE XREF: sub_1526A+2Dj
seg000:0001528B inc eax
seg000:0001528C
seg000:0001528C loc_1528C: ; CODE XREF: sub_1526A+1Fj
seg000:0001528C cmp eax, 5
seg000:0001528F jge short loc_1529B
seg000:00015291 movsx edx, byte ptr [esi+eax]
seg000:00015295 cmp edx, edi
seg000:00015297 jnz short loc_1528B
seg000:00015299 mov ecx, eax
seg000:0001529B
seg000:0001529B loc_1529B: ; CODE XREF: sub_1526A+18j
seg000:0001529B ; sub_1526A+25j
seg000:0001529B cmp ecx, 0FFFFFFFFh
seg000:0001529E jnz short loc_152BC
seg000:000152A0 xor eax, eax
seg000:000152A2 mov ebp, [esp+14h+var_14]
seg000:000152A5 jmp short loc_152A8
seg000:000152A7 ; ---------------------------------------------------------------------------
seg000:000152A7
seg000:000152A7 loc_152A7: ; CODE XREF: sub_1526A+4Ej
seg000:000152A7 inc eax
seg000:000152A8
seg000:000152A8 loc_152A8: ; CODE XREF: sub_1526A+3Bj
seg000:000152A8 cmp eax, 5
seg000:000152AB jge short loc_152BC
seg000:000152AD movsx edx, byte ptr [esi+eax]
seg000:000152B1 cmp edx, 0FFFFFFFFh
seg000:000152B4 jz short loc_152BA
seg000:000152B6 cmp edx, ebp
seg000:000152B8 jnz short loc_152A7
seg000:000152BA
seg000:000152BA loc_152BA: ; CODE XREF: sub_1526A+4Aj
seg000:000152BA mov ecx, eax
seg000:000152BC
seg000:000152BC loc_152BC: ; CODE XREF: sub_1526A+34j
seg000:000152BC ; sub_1526A+41j
seg000:000152BC cmp ecx, 5
seg000:000152BF jge short loc_152C5
seg000:000152C1 test ecx, ecx
seg000:000152C3 jge short loc_152C9
seg000:000152C5
seg000:000152C5 loc_152C5: ; CODE XREF: sub_1526A+55j
seg000:000152C5 xor eax, eax
seg000:000152C7 jmp short loc_152EE
seg000:000152C9 ; ---------------------------------------------------------------------------
seg000:000152C9
seg000:000152C9 loc_152C9: ; CODE XREF: sub_1526A+59j
seg000:000152C9 mov dl, byte ptr [esp+14h+var_14]
seg000:000152CC mov [ecx+esi], dl
seg000:000152CF lea eax, [ecx+ecx]
seg000:000152D2 add eax, esi
seg000:000152D4 mov edx, [eax+3]
seg000:000152D7 sar edx, 10h
seg000:000152DA test edx, edx
seg000:000152DC jge short loc_152E4
seg000:000152DE mov word ptr [eax+5], 0
seg000:000152E4
seg000:000152E4 loc_152E4: ; CODE XREF: sub_1526A+72j
seg000:000152E4 add [esi+ecx*2+5], bx
seg000:000152E9 mov eax, 1
seg000:000152EE
seg000:000152EE loc_152EE: ; CODE XREF: sub_1526A+5Dj
seg000:000152EE add esp, 4
seg000:000152F1 pop ebp
seg000:000152F2 pop edi
seg000:000152F3 pop esi
seg000:000152F4 retn
seg000:000152F4 sub_1526A endp ; sp = -4
seg000:00015269
seg000:0001526A
seg000:0001526A ; --------------- S U B R O U T I N E ---------------------------------------


Хотя странно из трех команд в sub_1526A нашел только mov [ecx+esi], dl :smile5:
в seg000:000152CC mov [ecx+esi], dl
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5229
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2030 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение AlexSpl » 11 авг 2015, 13:31

Переключитесь в режим блок-схем (пробел), будет нагляднее.

Вот недостающие:
seg000:0001527C mov [esp+14h+var_14], edx
seg000:000152C9 mov dl, byte ptr [esp+14h+var_14]

Поставьте курсор на var_14 и нажмите клавишу "K".
Вернуться к началу

offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение t800 » 11 авг 2015, 13:48

Спасибо! :smile1: Счас попробую понять как что происходит.
Вернуться к началу

offlineАватара пользователя
t800  
Ветеран
Ветеран
 
Сообщения: 983
Зарегистрирован: 22 июл 2015, 11:36
Пол: Не указан
Награды: 4
Наградной знак (1) Деревянный Щит (1) Золотой Меч (1) Серебряные Сапоги (1)
Поблагодарили: 191 раз.

Re: Heroes2 - вставляем свои аватары

Сообщение t800 » 11 авг 2015, 14:05

AlexSpl писал(а):

Переключитесь в режим блок-схем (пробел), будет нагляднее.

Вот недостающие:
seg000:0001527C mov [esp+14h+var_14], edx
seg000:000152C9 mov dl, byte ptr [esp+14h+var_14]

Поставьте курсор на var_14 и нажмите клавишу "K".


Поставил курсор нажал "K" и команды стали такие

seg000:0001527C mov [esp], edx
seg000:000152C9 mov dl, [esp]

:smile21:
Вернуться к началу

Пред.След.

Вернуться в Техническая часть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1