Работа с памятью игры, exe
|
|
walk | Дата: Воскресенье, 02.01.2011, 09:42 | Сообщение # 46 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Вобщем интересует такой вопрос, как эмулировать в gta VC арест ГГ: Вобщем нашёл нечто подобное: Code thread 'test'
:TEST_10 wait 0 if Player.Defined($player_char) else_jump @TEST_75 if 00E1: key_pressed 0 14 else_jump @TEST_75 05E6: 0@ = actor $player_actor struct 05E3: call_method 0x4BBE90 0@ num_params 0 pop 0 wait 1000
:TEST_75 jump @TEST_10 Но в игре получаю только текст арестован, при том этот текст никак не убирается, может я совсем не то нашёл, ведь в СА, ГГ можно арестовать путём записи числа в смещение в структуре игрока, но в вайс сити сколько не искал, наткнулся только на выше указанное, может есть способ найти этот адрес? И ещё: Хотелось узнать, как устроенно управление вертолётом с помощью мышки(можно не вертолёта, например водомёта на одной из машин) Добавлено (02.01.2011, 07:09) --------------------------------------------- Code {$CLEO}
const setPositionAndRotation = 0x50BEC0 setOnPoint = 0x50C8B0 CCamera = 0xB6F028 end
var $Player_Actor: Actor end
0000: while true wait 250 if $Player_Actor.Defined() then if 0AB0: key_pressed 9 then $Player_Actor.StorePos(0@, 1@, 2@) Inc(2@, 3.0) 04C4: store_coords_to 6@ 7@ 8@ from_actor $Player_Actor with_offset 0.0 0.0 -1.0 3@ = 0.0 4@ = 0.0 5@ = 0.0 0AC7: 10@ = var 0@ offset 0AC7: 11@ = var 3@ offset 0AC7: 12@ = var 6@ offset 0AC7: 14@ = var 3@ offset 0AA6: call setPositionAndRotation struct CCamera 2 0 ( rotation buffer dword: 11@ position buffer dword: 10@ ) 0AA6: call setOnPoint struct CCamera 3 0 ( unknown dword: 1 mode word: 2 point buffer dword: 12@ ) 0A93: end_custom_thread end end end Данный код приводил на Вол-Гта DK22Pac, меня интересует следующее: У всех работает этот код? Добавлено (02.01.2011, 09:42) --------------------------------------------- Извините за такое кол-во вопросов , просто я очень любознателен Есть ещё один вопрос http://savepic.org/1121547.jpg - из Сан Андреса Как правильно считывать от туда значение, каким опкодом, также если можно, с примером
Сообщение отредактировал walk - Воскресенье, 02.01.2011, 09:43 |
|
| |
DK22Pac | Дата: Воскресенье, 02.01.2011, 11:25 | Сообщение # 47 |
 $player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Quote Данный код приводил на Вол-Гта DK22Pac, меня интересует следующее: У всех работает этот код? Этот код проверял лично я сам. Я бы не постил его, если бы он не работал. Вот только нужды в нём особо большой нет. Quote Как правильно считывать от туда значение, каким опкодом, также если можно, с примером Смею предположить, что так(пример кода) Code 0@ = 0xB6F028 inc(0@, 0x860) 0a8d: 1@ = read 0@ 4 0 inc(0@, 0x4) 0a8d: 2@ = read 0@ 4 0 inc(0@, 0x4) 0a8d: 3@ = read 0@ 4 0
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 11:48 | Сообщение # 48 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote (DK22Pac) Этот код проверял лично я сам. Я бы не постил его, если бы он не работал. Вот только нужды в нём особо большой нет. У меня ошибка на нём вылетает Quote (DK22Pac) 0@ = 0xB6F028 inc(0@, 0x860) 0a8d: 1@ = read 0@ 4 0 inc(0@, 0x4) 0a8d: 2@ = read 0@ 4 0 inc(0@, 0x4) 0a8d: 3@ = read 0@ 4 0 Не совсем понял, то есть ты чтобы узнать каждую координату, прибавляешь смещение 0x860, а потом прибавляешь по 4 байта на каждую координату??
|
|
| |
DK22Pac | Дата: Воскресенье, 02.01.2011, 12:04 | Сообщение # 49 |
 $player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| По смещению 0x860 от начала блока камеры находятся координаты таргета. Собственно, по смещению 0x860 - X-координата, 0x864 - Y-координата, 0x868 - Z-координата. А почему бы не воспользоваться стандартными опкодами? Code 068D: get_camera_position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 015F: set_camera_position 664.9277 -479.6112 16.1668 rotation 0.0 0.0 0.0 0454: useless_store_debug_camera_position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 068E: get_camera_target_point_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 0160: set_camera_point_at 665.8948 -479.5685 16.4175 mode 2 0463: useless_store_debug_camera_target_point_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 12:28 | Сообщение # 50 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| DK22Pac, а каким опкодом узнать координаты, в которые смотрит камера, чтоб потом направить туда допустим объект?
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 15:38 | Сообщение # 51 |
 Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
| Quote (walk) Не совсем понял, то есть ты чтобы узнать каждую координату, прибавляешь смещение 0x860 Данный адрес занимает 12 байт (следующий адрес - 0x86C, 0x86C-0x860=12). В нём хранятся три координаты (3 числа float, по 4 байта каждое). Следовательно, чтобы их прочитать, надо обращаться к адресам 0x860, 0x864, 0x868, как и написал DK22Pac Quote (walk) каким опкодом узнать координаты, в которые смотрит камера, чтоб потом направить туда допустим объект? 068E
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 16:04 | Сообщение # 52 |
 Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
| Quote (walk) Вобщем интересует такой вопрос, как эмулировать в gta VC арест ГГ: Вобщем нашёл нечто подобное: Попробуй посмотреть, откуда эта функция вызывается (View-Open subviews-Function calls, список Caller).
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 16:34 | Сообщение # 53 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote Определить __cdecl-функцию в коде очень просто: она заканчивается retn без параметров А как понять, что retn без параметров? Добавлено (02.01.2011, 16:34) --------------------------------------------- И по поводу этого: Quote (walk) Хотелось узнать, как устроенно управление вертолётом с помощью мышки(можно не вертолёта, например водомёта на одной из машин) Можешь что-нибудь интересное сказать?
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 16:35 | Сообщение # 54 |
 Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
| Quote (walk) А как понять, что retn без параметров? Справа от команды retn в конце кода функции не написано никаких чисел (параметров).Quote (walk) Можешь что-нибудь интересное сказать? Я делал скрипт Swatvan с пулемётом, устанавливающий на башню swatvan-а рабочий пулемёт, который поворачивался в ту же сторону, куда смотрела камера. Для определения направления камеры использовались вышеназванные опкоды 068E и 068D.
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 16:48 | Сообщение # 55 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Вобщем нашёл следующее: http://savepic.org/1133884.jpg Кстати после этого идут функции управления камерой, как при аресте: Затемнение камеры, очистка оружия у игрока и какой-то CPlayerPed_restore Как я понял, это __thiscall, но попытавшись вызвать его Code 05E6: 0@ = actor $player_actor struct 05E3: call_method 0x42BBCE 0@ num_params 0 pop Получил ошибку, в чём проблема? 
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 16:53 | Сообщение # 56 |
 Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
| В 05E3 после pop есть ноль? Если нет, то допиши, а если да, то покажи скрин начала кода вызываемой функции (блок переменных, если есть, и первые 10-15 команд). Предварительно переведи IDA в режим блок-схемы (кнопка в левом верхнем углу с изображением блок-схемы).
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 17:00 | Сообщение # 57 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote (Den_spb) После pop есть ноль? Если да, то покажи скрин начала кода вызываемой функции (блок переменных, если есть, и первые 10-15 команд). ой-ёй-ёй слишком сложно для меня А можно поподробней, как определить начало кода вызываемой функции?
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 17:03 | Сообщение # 58 |
 Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
| 05E3: call_method 0x42BBCE 0@ num_params 0 pop 0 - здесь ноль должен стоять, а у тебя его нет.
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 17:04 | Сообщение # 59 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote (Den_spb) 05E3: call_method 0x42BBCE 0@ num_params 0 pop 0 - здесь ноль должен стоять, а у тебя его нет. Он стоит, это просто я так скопировал
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 17:11 | Сообщение # 60 |
 Создатель сайта
Группа: Администраторы
Сообщений: 1611
Статус: Offline
| Quote (walk) А можно поподробней, как определить начало кода вызываемой функции? Да просто код функции начинается с определённого адреса, который указывается в опкоде вызова функции. Чтобы определить, правильно ли ты вызываешь функцию, мне нужна подобная картинка: (базы для VC у меня нет)
|
|
| |