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

Поиск функции спавна предметов (Часть 3: Прощание с ОЗУ)


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

После второй части, углубимся в работу виртуальной машины, а именно нам нужно понять как виртуальная машина понимает какую функцию надо выполнять при определенной команде.

Тут все довольно просто, есть некоторый массив с нативными функциями, доступ к которым скрипт получает сравнивая их название. В этом методе помимо команд скриптов вызывающих нативные методы так же есть консольные команды.

 

Pen7Y1h.png

 

Массив с нативками выглядит следующим образом:

 

TaUBHQh.png

 

Таким образом получаем доступ к нужной нам функции, которая создает предмет около игрока. Функция принимает в себя  указатель на конструктор объекта, указатель на структуру игрока ( так и получаем координаты, где спавнить предмет ), адрес конструктора объекта, количество создаваемых предметов,  тип компилятора и указатель на стек виртуальной машины.

 

После выполнения рассматриваемого метода, виртуалка компилирует и ставит скомпилированный скрипт на выполнение в очередь.

Отбросив мелочи, типа получение координат, угла камеры и прочего для создания предмета около игрока, на этом можно заканчивать, единственное, что указатель на специфичный конструктор объекта, вычисляет по id, но находится вне метода и передается по стеку. Ну и конечно же видосик.
 

 

 

Прототип и сигнатура для тех, кто задумается создавать спавнер:

 

Спойлер

_DWORD *__fastcall SpawnEntity(_DWORD *pTESNPC, __int64 pPlayerCharacter, _BYTE *TESNPC_Constructor, int Amount, signed int unk_0, int stackframe, char CompilerType, char unk_1)

E8 ? ? ? ? 4C 89 B4 24 ? ? ? ? 48 8D 94 24 ? ? ? ? 48 8B C8 E8 ? ? ? ? 90 48 8B 9C 24 ? ? ? ? 48 85 DB 0F 84 ? ? ? ? F3 0F 10 43 ? F3 0F 11 44 24

 

 

Изменено пользователем ChestGlaring
  • Понравилось 1
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

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

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

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