#1 28-12-2006 07:50

Seemann
Registered: 07-08-2006
Posts: 2,155

Проверка версии SA из SCM

При написании скриптов, использующих технологию доступа к игровой памяти через массивы, в т.ч. ассемблерных вставок, необходимо учитывать разницу между версиями SA 1.0 и 1.01.

Строго говоря, разница есть даже между версиями игры для разных стран. Существет три разных exe: US, EUR, GER (соответственно, версия для США, Европы и Германии). В этих ехе адреса памяти могут разниться даже в пределах одной версии.

Для того, чтобы проверить, какая версия игры используется и в зависимости от этого корректировать адреса, можно использовать следующий способ:

Проверка адреса по индексу -429566. Если число там записанное равно 4611680, значит это версия 1.0, иначе 1.01

0@ = -429566
if
 &0(0@,1i) == 4611680
then

 // версия 1.0

else

 // версия 1.01

end

Данный способ является первым, и в будущем возможно будут найдены более универсальные методы проверки.

Offline

#2 31-12-2006 12:45

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Проверка версии SA из SCM

2Seemann:
Великолепно!


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#3 08-01-2007 09:23

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Проверка версии SA из SCM

Можно еще так:

hex
A1 68618A00          // MOV EAX,DWORD PTR DS:[8A6168]
3D 605E4600          // CMP EAX,00465E60
74 00                // JE SHORT X

...

end

только нужно вручную считать кол-во байт.

Last edited by Sanchez (08-01-2007 10:23)

Offline

#4 08-01-2007 16:03

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Проверка версии SA из SCM

ну сам по себе асмовый код не запустится wink нужно еще через те же массивы запустить его.

это примерно тоже самое как команду inc eax заменить на

mov edx, eax
mov ecx, 1
add edx, ecx
mov eax, edx

smile

ps:
http://sannybuilder.com/images/forums/dbmu2.jpg

Offline

#5 09-01-2007 08:49

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Проверка версии SA из SCM

ну сам по себе асмовый код не запустится  нужно еще через те же массивы запустить его.

Это я знаю smile  В твоем моде для каждой версии свой асмовский код, а можно все сделать в одном.

это примерно тоже самое как команду inc eax заменить на

mov edx, eax
mov ecx, 1
add edx, ecx
mov eax, edx



ps:
http://sannybuilder.com/images/forums/dbmu2.jpg

ты это о чем? sad


зы
Почему для проверки версий используется адрес 8A6168. Можно любой адрес использовать?

Last edited by Sanchez (09-01-2007 08:50)

Offline

#6 09-01-2007 08:58

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Проверка версии SA из SCM

В твоем моде для каждой версии свой асмовский код, а можно все сделать в одном.

ну да, только не намного проще будет. Там тогда все значения параметров придется через асм записывать, а удобнее через скм.

ты это о чем?

ну, код этот я привел для сравнения замены проверки версии через массивы на асм. wink

а P.S. это моя недавняя разработка, это я так, просто показать.

По адресу 8A6168 записан адрес первого парсера опкодов

.data:008A6168 OPCODE_SELECTORS    dd offset OpcodeSelector_1_0000_0063    ; DATA XREF: sub_469EB0+3Dr

он равен 0x00465E60 в версии 1.0.

В версии 1.1 этот индекс массива будет указывать на совершенно другое место, где никаким опкодами и не пахнет, поэтому вероятность что проверка сработает = 0.01%
Этот адрес удобно использовать, потому что кругом только .data и нет опасности напороться на Access Violation.

Last edited by Seemann (09-01-2007 09:02)

Offline

#7 09-01-2007 09:03

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Проверка версии SA из SCM

ну да, только не намного проще будет. Там тогда все значения параметров придется через асм записывать, а удобнее через скм.

А если код содержал 100 строк и два тебе нужных адреса пришлось добавлять ещу 100. А так накидал в стек все параметры, адреса потом

mov eax, dword [esi+X]

а вконце выравнял стек и все

add esp, Y

качется так проще



P.S. это моя недавняя разработка, это я так, просто показать

Хорошо!!! А по каким адресам лежат координаты игрока?
На скриншоте у тебя игра запущена в окнонном режиме? Это как?

Last edited by Sanchez (09-01-2007 09:29)

Offline

#8 09-01-2007 09:55

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Проверка версии SA из SCM

На скриншоте у тебя игра запущена в окнонном режиме? Это как?

это gta_sa_loader. Запускает игру без заставок, можно переключаться в оконный режим (если разрешение в игре не больше 800x600).
http://www.gtaforums.com/index.php?showtopic=222397
линки в теме.

А по каким адресам лежат координаты игрока?

это я опкодами (0172) smile рисуется через text_draw. Основная фишка не в этом, а в том, что ключики из GXT меняются из scm, и можно любой текст выводить не зависимо от GXT.

Offline

#9 09-01-2007 13:05

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Проверка версии SA из SCM

это gta_sa_loader. Запускает игру без заставок, можно переключаться в оконный режим (если разрешение в игре не больше 800x600).
http://www.gtaforums.com/index.php?showtopic=222397
линки в теме.

Кул, теперь хоть олька заработает smile, а то softice не ставится sad

Основная фишка не в этом, а в том, что ключики из GXT меняются из scm, и можно любой текст выводить не зависимо от GXT.

Это как? Может расскажешь?

Offline

#10 09-01-2007 13:55

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Проверка версии SA из SCM

Это как? Может расскажешь?

доделаю, покажу. менюшка подглючивает немного, не могу понять почему.

Offline

Board footer

Powered by FluxBB