Пятница, 19.04.2024, 15:25
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 23
  • 1
  • 2
  • 3
  • 22
  • 23
  • »
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
Работа с памятью игры, exe
Den_spbДата: Четверг, 17.06.2010, 21:54 | Сообщение # 1
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Здесь можно обсудить вопросы, связанные с чтением и записью памяти, вызовом функций gta_sa.exe из клео-скрипта, а также исследованием и редактированием gta_sa.exe.
 
ТЭВЗ_FECLДата: Пятница, 18.06.2010, 10:11 | Сообщение # 2
Группа: Модераторы
Сообщений: 36
Статус: Offline
А как распаковать эти dll архивы? Ведь в движке есть приложение которое их читает.
 
Den_spbДата: Пятница, 18.06.2010, 19:35 | Сообщение # 3
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
http://www.google.ru/search?....s_rfai=
 
d88Дата: Воскресенье, 04.07.2010, 09:37 | Сообщение # 4
Группа: Проверенные
Сообщений: 113
Статус: Offline
Den_spb, а можно сделать через память чтоб при проигрывании анимации удара одного актёра отнималось здоровье и проигрывалась ответная анимация у того, кого он ударил? Скриптом это можно сделать, но много и неудобно, а в игре же наверняка есть эти адреса для разных стилей борьбы.
 
Den_spbДата: Воскресенье, 04.07.2010, 17:19 | Сообщение # 5
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Не понял вопроса - актёры в игре и так отвечают ударом на удар. Надо заменить анимацию ответного удара или что?
 
d88Дата: Воскресенье, 04.07.2010, 19:48 | Сообщение # 6
Группа: Проверенные
Сообщений: 113
Статус: Offline
Не, надо не заменить, а сделать новую, анимацию, как бы новый удар.
 
Den_spbДата: Вторник, 06.07.2010, 01:59 | Сообщение # 7
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Насчёт этого не знаю - надо исследовать соответствующие функции в exe (ты тоже можешь учиться исследовать exe - для этого нужна база от listener и IDA 5).
Можно и на SB спросить, не исключено что кто-то этот вопрос уже разбирал
 
DK22PacДата: Вторник, 06.07.2010, 17:08 | Сообщение # 8
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Можешь пожалуйста обьяснить как работать с адресами функций. Как я понял для их вызова надо использовать 00а7? Bот допустим есть
0x0043A0B6
C V e h i c l e : : C r e a t e C a r
Можешь на этом примере обьяснить? Как передавать параметры.
И что означает С в начале, например Сped, что такое смещение? Обьясни, пожалуйста, несложными словами, сам я в этом разобраться не могу.

Добавлено (06.07.2010, 17:08)
---------------------------------------------
Можешь пожалуйста обьяснить как работать с адресами функций. Как я понял для их вызова надо использовать 00а7? Bот допустим есть
0x0043A0B6
C V e h i c l e : : C r e a t e C a r
Можешь на этом примере обьяснить? Как передавать параметры.
И что означает С в начале, например Сped, что такое смещение? Обьясни, пожалуйста, несложными словами, сам я в этом разобраться не могу.

 
Den_spbДата: Вторник, 06.07.2010, 17:55 | Сообщение # 9
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Да, для вызова функции нужно передать в опкод (0AA5-0AA8) адрес, с которого она начинается в exe.
Quote (DK22Pac)
0x0043A0B6

О каком exe идёт речь? Я работаю только с базой для СА - там есть функция 0x0043A0B0 - _spawnCarAtPlayerLocation - она спаунит перед игроком транспортное средство определённой модели (применяется в читах, создающих транспорт. В клео4 есть спец. опкод, применяющий эту функцию).
Когда какой опкод надо использовать - я ещё сам не совсем разобрался, сегодня задавал вопросы на SB: http://sannybuilder.com/forums/viewtopic.php?id=941 . Параметры, передаваемые в функцию, последовательно записываются в опкод вызова функции (см. СБ-справку, КЛЕО3-описания опкодов 0AA5-0AA8). Количество параметров зависит от конкретной функции.
Примеры по вызову функций, которые я использовал в своих скриптах:
1.Проверка, является ли модель моделью автомобиля
Code
0@ = 528 // ид модели
0AA7: call_function 0x4c5aa0 num_params 1 pop 1 0@ 1@ // isModelCar
if
           1@ == true
then
...    // что нужно делать если модель является моделью автомобиля
2.Спауним транспорт перед игроком
Code
0@ = 528 // ид модели транспорта
0AA5: call_function 0x43A0B0 num_params 1 pop 1 0@ // car spawn

Quote (DK22Pac)
И что означает С в начале
По-моему это означает "класс". Что касается 3д-объектов, то здесь они все перечислены: http://sannybuilder.com/forums/viewtopic.php?pid=2356#p2356
Quote (DK22Pac)
что такое смещение?
Смещение - определённое число байтов, которое нужно прибавить к какому-то адресу (например, началу структуры чего-либо). Пример: определим, прицеплен ли к тягачу 0@ прицеп, если прицеплен то найдём хэндл прицепа:
Code
0A97: 0@ = car 0@ struct // находим начало структуры тягача в памяти. Структура - блок данных о том или ином объекте
0@ += 0x4C8 // прибавляем смещение (смещения для структур транспорта: http://gtamodding.ru/wiki/Адреса_Памяти_(SA) , раздел Cars)
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 // читаем значение (начало структуры прицепа), записанное по данному смещению        
if
           0@ > 0      // если значение ненулевое, то к тягачу что-то прицеплено
then
           0AEB: 1@ = car_struct 0@ handle // получаем хэндл транспорта с данным началом структуры
           ...
 
DK22PacДата: Вторник, 06.07.2010, 23:00 | Сообщение # 10
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Спасибо огромное, буду изучать...
Quote
О каком exe идёт речь?

Брал это из адрессов VC
Quote
сегодня задавал вопросы на SB:

Вот именно эти вопросы меня интересовали больше всего
Вот например в некоторых написано кое-что в скобках...
Code
0 0 7 3 5 F D 0    
C B u l l e t I n f o : : I n i t i a l i s e ( ( v o i d ) )

Code
0 0 7 1 7 0 C 0    
C R G B A : : C R G B A ( ( u c h a r , u c h a r , u c h a r , u c h a r ) )

Code
0 0 5 B 9 0 3 0    
L o a d M a p D e f i n i t i o n F i l e ( c h a r ;   f i l e N a m e  ) )

И ещё такой вопрос - можно ли через память вычислить координаты точки пули, точнее коорд. её столкновения с чем-либо (я конечно догадываюсь как это реализовать и без лазания в память, с проверками коллизий (не пули а какбы псевдо-обьекта который движется по траектории пули, но думаю так не выйдет)), ты как думаешь, есть такой адресс?
Quote
последовательно записываются в опкод вызова функции

Ну это я понял, с опкодом 0ab1 я разобрался biggrin


Сообщение отредактировал DK22Pac - Вторник, 06.07.2010, 23:32
 
Den_spbДата: Среда, 07.07.2010, 04:41 | Сообщение # 11
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
И ещё такой вопрос - можно ли через память вычислить координаты точки пули, точнее коорд. её столкновения с чем-либо (я конечно догадываюсь как это реализовать и без лазания в память, с проверками коллизий (не пули а какбы псевдо-обьекта который движется по траектории пули, но думаю так не выйдет)), ты как думаешь, есть такой адресс?
Это можно и стандартными опкодами определить (06BD). А что касается адреса, то думаю он есть, т.к. в этой точке создаётся партикл (искры).
 
DK22PacДата: Среда, 07.07.2010, 20:14 | Сообщение # 12
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Подскажи где скачать IDA или скажи откуда ты качал. Я в этом не разбираюсь, ещё что-то не то скачаю.
 
Den_spbДата: Среда, 07.07.2010, 21:52 | Сообщение # 13
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Посмотри на cracklab.ru . Есть IDA и в других местах - несложно найти поисковиком. Для просмотра баз нужна версия не ниже 5.0
 
DK22PacДата: Воскресенье, 11.07.2010, 19:10 | Сообщение # 14
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Хм, я скачал ИДУ, но понятия не имею как выискывать адресс...
Вот например

Я конечно не прав но написал
0@ = 90.0
05E2: call_function 0046B100 num_params 1 pop 1 0@
Но игра вылетает
Там ведь не всё так просто, да?


Сообщение отредактировал DK22Pac - Воскресенье, 11.07.2010, 19:13
 
Den_spbДата: Воскресенье, 11.07.2010, 20:17 | Сообщение # 15
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Многие адреса и функции в базе проименованы - их можно искать по названию с помощью команды Search - Text (как поиск опкодов). Вкладка Functions - список всех функций exe. Предположим, если надо найти функции, имеющие отношение к поездам, то при активной вкладке Functions забиваем в поиск слово train. Вкладка IDA View-A показывает код в дизассемблированном виде (краткое руководство по ассемблеру тут: http://sannybuilder.com/forums/viewtopic.php?id=41 ). Надо сказать, что в exe 2 основных типа адресов - data и text. В адресах data хранятся различные значения, в адресах text записаны команды функций. Значения из адресов data можно читать или перезаписывать опкодами 0A8C / 0A8D (SA), для адресов text применяются те же опкоды, но необходимо снимать защиту памяти (параметр virtual protect ставить на 1) - таким образом можно скриптом изменить какие-то команды в данной функции, после чего эта функция будет работать по новому алгоритму.
Как вызывать функцию в скрипте: 1. определить, является ли данная процедура функцией или методом - для вызова функций и методов в клео разные опкоды. 2. определить, сколько параметров передаётся в данную функцию - их надо будет прописать в опкод. Эти вопросы обсуждались тут: http://sannybuilder.com/forums/viewtopic.php?pid=11621#p11621
Рассмотрим на примере функции с твоего скрина. 1. Процедура является функцией, а не методом (признак метода - использование значение из регистра ECX, в который перед этим ничего не было записано). 2. В стэковом фрейме (структура переменных, описанная в начале функции) 2 переменные имеют положительное смещение от начала структуры (смещение переменной arg_0 равно 8, а смещение переменной arg_4 равно 0xC). Переменные, имеющие положительное смещение - это параметры, передаваемые в функцию (их надо будет указать и в опкоде).
Ещё замечание: в IDA адреса функций записаны в 16-ричном формате, в коде скрипта к этому адресу следует приписать 0x (приставка, обозначающая 16-ричное число).
 
Форум » Игры серии ГТА » Работа с памятью, exe » Работа с памятью игры, exe
  • Страница 1 из 23
  • 1
  • 2
  • 3
  • 22
  • 23
  • »
Поиск: