08.09.2010, 23:55
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
09.09.2010, 00:56
Каков аналог NOP для команды UN:C?
09.09.2010, 00:59
Опкод нопа - 90h = 144
09.09.2010, 03:12
(08.09.2010 22:48)GhostManSD Wrote: [ -> ]То есть для кнопки с кодом ID=7802 должно быть cmp eax, 7802?в большинстве случаев проверяемые ID элементов окна в функции-обработчике находятся внутри switch-ей, поэтому ситуация cmp <ID>, 0x7777 встречается редко.
09.09.2010, 09:39
так свич - это и есть последовательность сравнений и прыжки на соотв. позиции.
09.09.2010, 10:14
Bers, спасибо! Т.е. если я хочу забить адрес NOP-ами, то я должен ввести !!UN:C[адрес] / [размер адреса] / 144;? А где размер адреса смотреть? Артмани подойдет?
09.09.2010, 14:55
nop - однобайтовая команда, а смотреть в оле, там слева от команд пишутся байты опкодов: e7 12345678 - 5 байт, 5 nop-ов нужно по одному.
09.09.2010, 19:57
Quote:так свич - это и есть последовательность сравнений и прыжки на соотв. позиции.не всегда. Скажем, для свитчей на свойства существ используются две таблицы - таблица существ и таблица адресов обработчиков того или иного свитча. А итоговый код выглядит так:
Code:
CPU Disasm
Address Hex dump Command Comments
00440906 |. 83C0 C1 ADD EAX,-3F ; Switch (cases 3F..87, 6 exits)
00440909 |. 83F8 86 CMP EAX,-7A
0044090C |. 0F87 99090000 JA 004412AB
00440912 |. 33C9 XOR ECX,ECX
00440914 |. 8A88 4C7A7900 MOV CL,BYTE PTR DS:[EAX+797A4C]
0044091A |. FF248D C01244 JMP DWORD PTR DS:[ECX*4+4412C0]
797A4C - адрес таблицы соответствий (хранит номера ветвей-кейсов)
4412C0 - адрес таблицы обработчиков (хранит адреса ветвей-кейсов)
09.09.2010, 20:33
хм, интересно
09.09.2010, 21:01
Таблица NOP'ов с разным числом байт. (Макрос для MS VC)
Spoiler (Click to View)
Code:
npad macro size
if size eq 1
nop
else
if size eq 2
mov edi, edi
else
if size eq 3
; lea ecx, [ecx+00]
DB 8DH, 49H, 00H
else
if size eq 4
; lea esp, [esp+00]
DB 8DH, 64H, 24H, 00H
else
if size eq 5
add eax, DWORD PTR 0
else
if size eq 6
; lea ebx, [ebx+00000000]
DB 8DH, 9BH, 00H, 00H, 00H, 00H
else
if size eq 7
; lea esp, [esp+00000000]
DB 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H
else
if size eq 8
; jmp .+8; .npad 6
DB 0EBH, 06H, 8DH, 9BH, 00H, 00H, 00H, 00H
else
if size eq 9
; jmp .+9; .npad 7
DB 0EBH, 07H, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H
else
if size eq 10
; jmp .+A; .npad 7; .npad 1
DB 0EBH, 08H, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H, 90H
else
if size eq 11
; jmp .+B; .npad 7; .npad 2
DB 0EBH, 09H, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H, 8BH, 0FFH
else
if size eq 12
; jmp .+C; .npad 7; .npad 3
DB 0EBH, 0AH, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H, 8DH, 49H, 00H
else
if size eq 13
; jmp .+D; .npad 7; .npad 4
DB 0EBH, 0BH, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H, 8DH, 64H, 24H, 00H
else
if size eq 14
; jmp .+E; .npad 7; .npad 5
DB 0EBH, 0CH, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H, 05H, 00H, 00H, 00H, 00H
else
if size eq 15
; jmp .+F; .npad 7; .npad 6
DB 0EBH, 0DH, 8DH, 0A4H, 24H, 00H, 00H, 00H, 00H, 8DH, 9BH, 00H, 00H, 00H, 00H
else
%out error: unsupported npad size
.err
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endm
09.09.2010, 23:24
db size dup(90h)
09.09.2010, 23:41
(09.09.2010 23:24)gamecreator Wrote: [ -> ]db size dup(90h)Так не интересно.

10.09.2010, 01:10
зато сразу видно где забитые байты
10.09.2010, 03:12
Подскажите, пожалуйста, как найти адрес стандартного триггера WoG. Например, !?HE.
Кажись, вник. В комментариях - ошибки на неправильный синтаксис. Будем копать оттуда.
Кажись, вник. В комментариях - ошибки на неправильный синтаксис. Будем копать оттуда.
10.09.2010, 04:09
Нашел место, где сравниваются данные из EBP и номер героя (ввел специально неправильную команду !?HE-1). Вопрос: что теперь делать, чтобы присвоить -1 значение типа "если x=-1, то выполнять для каждого значения от 0 до 156"? Куды иттить, то бишь, где этот гребаный x искать?