ChestGlaring Опубликовано 20 ноября, 2020 Поделиться Опубликовано 20 ноября, 2020 (изменено) После второй части, углубимся в работу виртуальной машины, а именно нам нужно понять как виртуальная машина понимает какую функцию надо выполнять при определенной команде. Тут все довольно просто, есть некоторый массив с нативными функциями, доступ к которым скрипт получает сравнивая их название. В этом методе помимо команд скриптов вызывающих нативные методы так же есть консольные команды. Массив с нативками выглядит следующим образом: Таким образом получаем доступ к нужной нам функции, которая создает предмет около игрока. Функция принимает в себя указатель на конструктор объекта, указатель на структуру игрока ( так и получаем координаты, где спавнить предмет ), адрес конструктора объекта, количество создаваемых предметов, тип компилятора и указатель на стек виртуальной машины. После выполнения рассматриваемого метода, виртуалка компилирует и ставит скомпилированный скрипт на выполнение в очередь. Отбросив мелочи, типа получение координат, угла камеры и прочего для создания предмета около игрока, на этом можно заканчивать, единственное, что указатель на специфичный конструктор объекта, вычисляет по 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 Изменено 20 ноября, 2020 пользователем ChestGlaring 1 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения