Объявления |
---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: Heroes2 - вставляем свои аватарыИ еще вопрос? А нельзя в самом дебагере както изменять команды? Остановил по BP посмотрел какие команды идут. Изменил их. Нажать F5 на продолжение игры и посмотреть что получилось. Тогда было проще понять какая команда че делает.
|
Re: Heroes2 - вставляем свои аватарыЦитата: Какая команда что делает и так понятно Для этого существуют справочники по ассемблеру. Для того, чтобы найти адрес таблицы, нам придётся отследить весь путь. Итак, идём по коду снизу вверх: 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
|
Re: Heroes2 - вставляем свои аватарыСтранно у себя не нашел таких команд
1. mov [ecx+esi], dl 2. mov dl, [esp] 3. mov [esp], edx Цитата: 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] |
Re: Heroes2 - вставляем свои аватарыЦитата: 1. mov [ecx+esi], dl 2. mov dl, [esp] 3. mov [esp], edx Потому что они внутри функции, которая вызывается вот этой командой: call sub_1526A. Кстати, sub_1526A - это имя, которое IDA автоматически назначила функции, и для нашего куска дампа не имеет смысла. Хотя всё-таки попробуйте сделать двойной клик на имени, вдруг код этой функции попал в Ваш дамп. Если нет, то сделайте отдельный дамп этой функции и найдёте в нём эти команды. Возможно, они будут отличаться в Вашей версии. |
Re: Heroes2 - вставляем свои аватарыAlexSpl писал(а): Цитата: 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 ? А насколько дамп больше надо сделать чтобы она влезла? |
Re: Heroes2 - вставляем свои аватарыА сейчас по двойному клику на sub_1526A разве не переходит? Ну попробуйте memdumpbin cs:200000 40000 тогда.
|
Re: Heroes2 - вставляем свои аватарыAlexSpl писал(а): По клику перешла Ой а тут много всего И кучей стрелок. Цитата: 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 в seg000:000152CC mov [ecx+esi], dl |
Re: Heroes2 - вставляем свои аватарыПереключитесь в режим блок-схем (пробел), будет нагляднее.
Вот недостающие: seg000:0001527C mov [esp+14h+var_14], edx seg000:000152C9 mov dl, byte ptr [esp+14h+var_14] Поставьте курсор на var_14 и нажмите клавишу "K". |
Re: Heroes2 - вставляем свои аватары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] |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2