| 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 EBP005CCD81  |. 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 |  |