Sav
Posts: 2180
|
По-моему, лучше в хуке по адресу A запомнить значение по-адресу B, а проверять в хуке по адресу C, если я правильно понял, что тебе надо.
|
|
03.02.2011 15:37 |
|
Prayer
Posts: 56
|
(03.02.2011 13:46)GhostManSD Wrote: На фига бряк-то? Смещай координаты просто за пределы экрана.
Или забей нопами отрисовку.
Хммм... А это как? Где искать координаты? Отрисовку?
Я же писал что делитант...
|
|
03.02.2011 20:13 |
|
GhostManSD
Posts: 1054
|
Нашел свою кнопку? Перейди на адрес, где она прописывается (в Олли: search > text references > твоя кнопка.def. Нажимаешь на ней лкм. Ты попадешь в CPU. Там рядом с названием кнопки будут прочие аргументы. Координаты находятся на пару строчек ниже (2 адреса: отступ сверху и отступ слева). Они - в шестнадцатеричном формате. Для перевода используй калькулятор Windows в инженерном режиме. Поставь большие координаты, чтобы кнопка "уехала" за пределы экрана. Вроде все.
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
|
|
03.02.2011 20:31 |
|
GhostManSD
Posts: 1054
|
Sav, попробую. Мне тоже приходила в голову такая мысль, но я думал, есть способ сделать без второго хука.
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
|
|
03.02.2011 20:37 |
|
Дьякон
Posts: 395
|
покажи код
Страус труп (с) Бьерн
|
|
03.02.2011 21:57 |
|
GhostManSD
Posts: 1054
|
Адреса для хука (точнее, для хука - верхний, а остальные прописываю для восстановления оригинальных команд); при хуке происходит вызов функции 90003 (это я уже прописал в плагине).
Code:
005CCD80 /$ 55 PUSH EBP
005CCD81 |. 8BEC MOV EBP, ESP
005CCD83 |. 6A FF PUSH -1
005CCD85 |. 68 575F6300 PUSH 00635F57 ; SE handler installation
Следующий код - тип подложки гильдии магов. Вычисляется здесь.
Code:
005CCEC5 |. 8B15 4C956900 MOV EDX, DWORD PTR DS:[69954C]
005CCECB |. 68 00080000 PUSH 800 ; /Arg7 = 00000800
005CCED0 |. 8B4A 38 MOV ECX, DWORD PTR DS:[EDX+38] ; |
005CCED3 |. 0FBE51 04 MOVSX EDX, BYTE PTR DS:[ECX+4] ; |
005CCED7 |. 8B0C95 6CA3680>MOV ECX, DWORD PTR DS:[EDX*4+68A36C] ; |
005CCEDE |. 51 PUSH ECX ; |Arg6
В функции 90003 игрок может установить параметр SN:X1 от -1 до 8. Если X1=-1, то значение ECX из кода №2 остается неизменным и соответствует реальному типу города. Если 0<X1<8, то устанавливается подложка соответствующего типа города.
Было бы еще здорово узнать, как эти параметры выставлять. При попытке прописать в своей dll нечто в духе MOV DWORD General.EventParams, 1 Паскаль говорит, что никакого General в природе нет.
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 04.02.2011 00:02 by GhostManSD.)
|
|
04.02.2011 00:00 |
|
Sav
Posts: 2180
|
Здесь Берс показывал мне, как использовать для передачи и приёма параметров SN:X.
|
|
04.02.2011 00:07 |
|
Дьякон
Posts: 395
|
ты мне свой код выложи
Страус труп (с) Бьерн
|
|
04.02.2011 00:08 |
|
GhostManSD
Posts: 1054
|
Code:
PROCEDURE MageGuildBackground; ASSEMBLER; {$FRAME-}
ASM
PUSHAD// Push all registers
CMP DWORD [$887668], -1 // Compare -1 with v1
JZ @@Leave
MOV EAX, DWORD [$887668] // Move v1 to EAX
MOV DWORD [$5CCED7], $8B0C85 // Change opcode
MOV DWORD [$5CCED8], $68A36C // Change parameter
POPAD // Restore all registers
@@Leave:
POPAD // Restore all registers
PROCEDURE HOOK_MageGuildEnter; ASSEMBLER; {$FRAME-}
ASM
PUSHAD // Push all registers
CALL MageGuildBackground
PUSH 90003 // Push function number
MOV EAX, $74CE30 // Move $74CE30 to EAX
CALL EAX // Call ERM-function
ADD ESP, 4 // Add 4 to ESP
POPAD // Restore all registers
PUSH EBP // Push EBP
MOV EBP, ESP // Move ESP to EBP
PUSH -1 // Push -1
PUSH $5CCD85 // Push $5CCD85
END; // .PROCEDURE HOOK_MageGuildEnter
BEGIN
HookCode(POINTER($5CCD80), @HOOK_MageGuildEnter, C_HOOKTYPE_JUMP); // 90003
END.
До этого вместо MOV устанавливал через PINTEGER таким же образом значения по адресам.
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 04.02.2011 00:23 by GhostManSD.)
|
|
04.02.2011 00:22 |
|
etoprostoya
Posts: 1809
|
А что у тебя подряд два POPAD в MageGuildBackground? Причём один то выполняется, то нет.
|
|
04.02.2011 01:36 |
|
GhostManSD
Posts: 1054
|
Ну так вроде же надо восстанавливать регистры независимо от итога. Хотя во втором случае никакие регистры вроде не меняются, так что там и правда нет нужды. Но проблема-то не в этом.
Гм. Сейчас вот на свежую голову все это посмотрел и увидел, что если вручную в Олли поменять процедуру в нужном мне адресе, получается вот что:
БЫЛО
Code:
005CCED7 8B0C95 6CA36800 MOV ECX, DWORD PTR DS:[EDX*4+68A36C]
005CCEDE 51 PUSH ECX
005CCEDF |. 6A 01 PUSH 1
СТАЛО
Code:
005CCED7 3E:8B0C85 6CA36800 MOV ECX, DWORD PTR DS:[EAX*4+68A36C]
005CCEDF |. 6A 01 PUSH 1
Выходит, происходит сдвиг, и команда PUSH ECX затирается. Как бороться?
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 04.02.2011 01:56 by GhostManSD.)
|
|
04.02.2011 01:51 |
|
Sav
Posts: 2180
|
Если что-то затирается, надо в конце процедуры хука push-ить адрес первой незатираемой команды, а все затираемые выполнять в процедуре.
В процедуре MageBuildBackgroung убери popad перед "@@leave:" - другой popad и так будет выполняться всегда.
|
|
04.02.2011 02:02 |
|
etoprostoya
Posts: 1809
|
Если у тебя
выполняется, то идёт один POPAD, иначе - два. Ты уверен, что так и должно быть?
|
|
04.02.2011 02:07 |
|
GhostManSD
Posts: 1054
|
Попробовал поменять код. Вместо двух процедур сделал одну.
Code:
PROCEDURE HOOK_MageGuildEnter; ASSEMBLER; {$FRAME-}
ASM
PUSHAD // Push all registers
PUSH 90003 // Push function number
MOV EAX, $74CE30 // Move $74CE30 to EAX
CALL EAX // Call ERM-function
ADD ESP, 4 // Add 4 to ESP
POPAD // Restore all registers
MOV EDX, DWORD [$69954C]
PUSH 800
MOV ECX, DWORD [EDX+$38]
MOVSX EDX, BYTE [ECX+4]
CMP DWORD [$887668], -1
JNZ @@Change
PUSH ECX
PUSH $5CCEDF
@@Change:
MOV EAX, DWORD [$887668]
MOV ECX, DWORD [EAX*4+$68A36C]
END; // .PROCEDURE HOOK_MageGuildEnter
Ошибка, чсх, все так же вылазит. Выкладываю ее в спойлере.
Code:
******************************_Exception_(trace_details)_******************************
### Location: 8 : 28
### Location: 5 : 16
EIP = {0x005FE9D4}, Access Violation. Attempt to {write} the inaccessible data at {0x0000002B}
The Latest Executed ERM Receiver:
VRv1:S-1;
; Предварительная настройка
!?PI; Пост-инструкция
!!UN:C6972812/4/?v801 C6979316/4/?v
Register Context:
EAX = 0xFFFFFFFF
EBX = 0x00000004
ECX = 0x00000000
EDX = 0x00000000
ESI = 0xFFFFFFFF
EDI = 0x00000000
EBP = 0x00229884
ESP = 0x0022986C
Stack Frame:
0x0022986C : 0x0044FFC4
0x00229870 : 0x06F268D0
0x00229874 : 0xFFFFFFFF
0x00229878 : 0x002298CC
0x0022987C : 0x00628C08
0x00229880 : 0xFFFFFFFF
0x00229884 : 0x002298D8
0x00229888 : 0x005CCEF9
0x0022988C : 0x0000014C
0x00229890 : 0x0000004C
0x00229894 : 0x0000008D
0x00229898 : 0x000000D9
0x0022989C : 0x00000001
0x002298A0 : 0x04AB5110
0x002298A4 : 0x00000320
0x002298A8 : 0x00000002
0x002298AC : 0x046E1720
0x002298B0 : 0x00000000
0x002298B4 : 0x06F268A0
0x002298B8 : 0x06F266B0
0x002298BC : 0x00000002
0x002298C0 : 0x06F26A00
0x002298C4 : 0x06F26760
0x002298C8 : 0x00000060
0x002298CC : 0x002298F8
0x002298D0 : 0x00635F57
0x002298D4 : 0xFFFFFFFF
0x002298D8 : 0x00229904
0x002298DC : 0x005CEB14
0x002298E0 : 0x00000002
0x002298E4 : 0x00229B88
0x002298E8 : 0x046E1720
0x002298EC : 0x00229B88
0x002298F0 : 0x00229B50
0x002298F4 : 0x06F268A0
0x002298F8 : 0x00229B44
0x002298FC : 0x00635FC6
0x00229900 : 0xFFFFFFFF
0x00229904 : 0x00229B50
0x00229908 : 0x005D3984
0x0022990C : 0x00000001
0x00229910 : 0x00000000
0x00229914 : 0x046E05C0
0x00229918 : 0x047ED8E0
0x0022991C : 0x7E368734
0x00229920 : 0x0067052E
0x00229924 : 0x00000201
0x00229928 : 0x00000001
0x0022992C : 0x0136036B
0x00229930 : 0x047ED8E0
0x00229934 : 0xDCBAABCD
0x00229938 : 0x00000000
0x0022993C : 0x00229980
0x00229940 : 0x047ED8E0
0x00229944 : 0x002299AC
0x00229948 : 0x7E368BD9
0x0022994C : 0x7FFDF000
0x00229950 : 0x002299AC
0x00229954 : 0x7E36885A
0x00229958 : 0x0022996C
0x0022995C : 0x7E36882A
0x00229960 : 0x00000201
0x00229964 : 0x047ED8E0
0x00229968 : 0x00000000
0x0022996C : 0x00000014
0x00229970 : 0x00000001
0x00229974 : 0x00000000
0x00229978 : 0x00000000
0x0022997C : 0x00000010
0x00229980 : 0x00000000
0x00229984 : 0x0022998C
0x00229988 : 0x00000001
0x0022998C : 0x00000000
0x00229990 : 0x00000000
0x00229994 : 0x00229960
0x00229998 : 0x7E37B341
0x0022999C : 0x00229AA0
0x002299A0 : 0x7E39048F
0x002299A4 : 0x7E368830
0x002299A8 : 0xFFFFFFFF
0x002299AC : 0x7E36882A
0x002299B0 : 0x7E37A013
0x002299B4 : 0x00000000
0x002299B8 : 0x047ED8E0
0x002299BC : 0x0067052E
0x002299C0 : 0x00000201
0x002299C4 : 0x00000001
0x002299C8 : 0x0136036B
0x002299CC : 0x00000000
0x002299D0 : 0x00000000
0x002299D4 : 0x00000001
0x002299D8 : 0x00000201
0x002299DC : 0x002299FC
0x002299E0 : 0x7E37A998
0x002299E4 : 0x047ED8E0
0x002299E8 : 0x0067052E
0x002299EC : 0x00000201
0x002299F0 : 0x00000001
0x002299F4 : 0x0136036B
0x002299F8 : 0x00000001
0x002299FC : 0x045718D0
0x00229A00 : 0x200040CB
0x00229A04 : 0x047ED8E0
0x00229A08 : 0x0067052E
0x00229A0C : 0x00000201
0x00229A10 : 0x00000001
0x00229A14 : 0x0136036B
0x00229A18 : 0x00229A84
0x00229A1C : 0x045718D0
0x00229A20 : 0x7E368734
0x00229A24 : 0x0067052E
0x00229A28 : 0x00000201
0x00229A2C : 0x00000001
0x00229A30 : 0x0136036B
0x00229A34 : 0x045718D0
0x00229A38 : 0xDCBAABCD
0x00229A3C : 0x00000000
0x00229A40 : 0x00229A84
0x00229A44 : 0x045718D0
0x00229A48 : 0x00229AB0
0x00229A4C : 0x7E368BD9
0x00229A50 : 0x7FFDF000
0x00229A54 : 0x00229AB0
0x00229A58 : 0x7E36885A
0x00229A5C : 0x00229A70
0x00229A60 : 0x7E36882A
0x00229A64 : 0x00229B40
0x00229A68 : 0x00229B38
0x00229A6C : 0x02D07B50
0x00229A70 : 0x00000014
0x00229A74 : 0x00000001
0x00229A78 : 0x00000000
0x00229A7C : 0x00000000
0x00229A80 : 0x00000010
0x00229A84 : 0x00000000
0x00229A88 : 0x00000030
0x00229A8C : 0x00000001
0x00229A90 : 0x00000000
0x00229A94 : 0x00000000
0x00229A98 : 0x00229A64
0x00229A9C : 0x0067052E
0x00229AA0 : 0x00229B00
0x00229AA4 : 0x7E39048F
0x00229AA8 : 0x7E368830
0x00229AAC : 0xFFFFFFFF
0x00229AB0 : 0x7E36882A
0x00229AB4 : 0x7E3689CD
0x00229AB8 : 0x00000000
0x00229ABC : 0x7E3693E9
0x00229AC0 : 0x7E3693A8
0x00229AC4 : 0x00229B38
0x00229AC8 : 0x00000000
0x00229ACC : 0x00000000
0x00229AD0 : 0x046E00B8
0x00229AD4 : 0x046E0040
0x00229AD8 : 0x00DBAE6C
0x00229ADC : 0x76B24E7B
0x00229AE0 : 0x08958FC0
0x00229AE4 : 0x00000000
0x00229AE8 : 0x00002710
0x00229AEC : 0x0050DA7F
0x00229AF0 : 0x046E00B8
0x00229AF4 : 0x00000001
0x00229AF8 : 0x046DF4F8
0x00229AFC : 0x00DBAE28
0x00229B00 : 0x00000001
0x00229B04 : 0x76B24E7B
0x00229B08 : 0x08958FC0
0x00229B0C : 0x0044FD20
0x00229B10 : 0x00000001
0x00229B14 : 0x00000000
0x00229B18 : 0x00229B88
0x00229B1C : 0x06F3C1C0
0x00229B20 : 0x046E05C0
0x00229B24 : 0x00229B3C
0x00229B28 : 0x005FF3E7
0x00229B2C : 0x000000E2
0x00229B30 : 0x00229B88
0x00229B34 : 0x04972678
0x00229B38 : 0x046E05C0
0x00229B3C : 0x00229B50
0x00229B40 : 0x00000002
0x00229B44 : 0x00229BD0
0x00229B48 : 0x00636633
0x00229B4C : 0xFFFFFFFF
0x00229B50 : 0x00229BB0
0x00229B54 : 0x004B0C39
0x00229B58 : 0x00000000
0x00229B5C : 0x046E1720
0x00229B60 : 0x046E05C0
0x00229B64 : 0x046E1940
0x00229B68 : 0x00000008
0x00229B6C : 0x0000036B
0x00229B70 : 0x00000136
0x00229B74 : 0x00000000
0x00229B78 : 0x0000036B
0x00229B7C : 0x00000136
0x00229B80 : 0x00000000
0x00229B84 : 0x00000000
0x00229B88 : 0x00000200
0x00229B8C : 0x0000000C
0x00229B90 : 0x00000002
0x00229B94 : 0x00000000
0x00229B98 : 0x000002FB
0x00229B9C : 0x000000E2
0x00229BA0 : 0x00000000
0x00229BA4 : 0x00000000
0x00229BA8 : 0x00000001
0x00229BAC : 0x00000000
0x00229BB0 : 0x00229BDC
0x00229BB4 : 0x004B0A6A
0x00229BB8 : 0x046E1940
0x00229BBC : 0x00000001
0x00229BC0 : 0x00000000
0x00229BC4 : 0x046E1940
0x00229BC8 : 0x046E05C0
0x00229BCC : 0x00229BB8
0x00229BD0 : 0x00229FF4
0x00229BD4 : 0x0062BA80
0x00229BD8 : 0x00000005
0x00229BDC : 0x00229C0C
0x00229BE0 : 0x005BE660
0x00229BE4 : 0x046E1720
0x00229BE8 : 0x04AB4FA8
0x00229BEC : 0x004AADB4
0x00229BF0 : 0x00000000
0x00229BF4 : 0x06D21676
0x00229BF8 : 0x046E1940
0x00229BFC : 0x00000062
0x00229C00 : 0x00000270
0x00229C04 : 0x00000000
0x00229C08 : 0x0498B1B0
0x00229C0C : 0x0022A000
0x00229C10 : 0x004A9F2B
0x00229C14 : 0x06D21676
0x00229C18 : 0x000DA003
0x00229C1C : 0x00000001
0x00229C20 : 0x0498B1B0
0x00229C24 : 0x046E1940
0x00229C28 : 0x06D21676
0x00229C2C : 0x00000000
0x00229C30 : 0x00000000
0x00229C34 : 0x00292D38
0x00229C38 : 0x00229E38
0x00229C3C : 0x0022A050
0x00229C40 : 0x00000001
0x00229C44 : 0x00229B84
0x00229C48 : 0x00000000
0x00229C4C : 0x0498B1B0
0x00229C50 : 0x046E1940
Используемый код в ERM:
!?FU90003;
!!VRv1:S-1;
Κακῆς ἀπ' ἀρχῆς γίγνεται τέλος κακόν.
(This post was last modified: 04.02.2011 03:40 by GhostManSD.)
|
|
04.02.2011 03:16 |
|
etoprostoya
Posts: 1809
|
Ты вообще в курсе, что PUSH(AD) и POP(AD) изменяют значение ESP?
|
|
04.02.2011 03:45 |
|