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