Перейти к содержанию

Поиск внутриигровых функций


Рекомендуемые сообщения

Ребят, подскажите пожалуйста каким наиболее удобным способом можно искать внутриигровые функции?

Допустим как найти функцию передвижения персонажа? А именно в игре мы нажимаем кнопку "w", тем самым заставляя игрока двигаться. Суть в том чтобы заставить персонажа аналогично передвигаться, но при этом, нажимая кнопку из своей программы. Пожалуйста, не надо предлагать использовать WinApi хуки, для меня это как темный лес. Хотелось бы все это провернуть на уровне памяти, либо за счет передачи своих аргументов в функцию. Я полагаю при нажатии кнопки, сама игра перехватывает функцию нажатия клавиши, а затем активирует какой-либо флаг, и этот флаг передается в функцию передвижения в качестве аргумента, мол "все ОК, идти разрешаю", если это даже и так, то я ума не приложу, каким образом его искать с помощью Cheat Engine...

Ссылка на комментарий
Поделиться на другие сайты

Привет! Когда ты отлаживаешь игру и в отладчике ставишь брейкпоинт на, скажем, адрес координаты по оси X персонажа, то отладчик тебя отправляет в эту самую функцию. Просто на уровне ассемблера там возникает достаточно глубокая вложенность функций одна в другую (т.к. в ассемблере по факту функций нет) и внешне это выглядит примерно так:

 

Инстанс класса игрока

    -> Указатель на таблицу его методов

        -> Указатель на функцию "походить"

            -> Функция "походить" (ось1, ось2, ось3)

               -> Подфункция "поменять значение оси в свойствах персонажа"

 

В последней ты и приземляешься, когда отлаживаешь игру. Что делать? Внимательно прочитать написанное на экране (чаще всего функции самого низкого уровня очень короткие - в 1-2 экрана), а дальше выполнить код до первого возврата (ret) и читать опять. И потом еще. В конце концов ты наткнешься на что-нибудь в духе:

 

PUSH EAXPUSH EAX + 0x4PUSH EAX + 0x8CALL 0x123456

 

Это и будет та самая функция. Скажем, что в EAX хранится массив координат персонажа, тогда 0x123456 - адрес функции "походить". Как-то так.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В принципе я это понимаю, но все равно спасибо. А вообще хотелось бы понять, как взаимодействует нажатие клавиш с памятью игры. Правильное ли это рассуждение?

"При нажатии кнопки, сама игра перехватывает функцию нажатия клавиши, а затем активирует какой-либо флаг, и этот флаг передается в функцию передвижения в качестве аргумента, мол "все ОК, идти разрешаю""

 

А вот допустим я хочу найти функцию атаки. Если  я поставлю бряк на хп противника, выведит ли он меня на функцию атаки?

Ссылка на комментарий
Поделиться на другие сайты

Выведет, если одна и та же функция используется и для врагов и для твоего персонажа. Во-вторых, если поставить брейкпоинт на значение патронов. Третий вариант - немножко изучить, как работают игры в целом. Скажем, для работы с клавиатурой есть WinAPI-функции. А еще есть DirectInput - библиотека для устройств ввода-вывода в составе DirectX. И еще есть всякое разное. Туда тоже можно ставить брейкпоинты и отлаживать.
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.