dword — c ++ typedef с параметрами и fastcall

так что я просматриваю некоторый исходный код, и это меня озадачило. Я немного новичок в c ++, поэтому мне трудно понять, для чего это нужно. Я действительно не знаю, для чего предназначен следующий typedef и как он используется в приведенном ниже коде.

typedef void (__fastcall *TSecType_long___SetData_t)(DWORD dwAddress, DWORD dwEDX, DWORD dwValue);

Вот некоторые значения, используемые для метода, который использует этот typedef.

const TSecType_long___SetData_t TSecType_long___SetData = reinterpret_cast<TSecType_long___SetData_t>(0x00518430); // 56 8B ? 8B ? ? ? ? ? 41 [3rd Result]

const DWORD *const pdwUserLocal = reinterpret_cast<const DWORD *const>(0x016A1234); // 8B ? ? ? ? ? 85 C9 74 ? 83 B8 ? ? ? ? 00 74 ? 8B ? ? ? ? ? 85 C0 7E ? 8B
const DWORD dwTeleportToggleOffset = 0x00008A94; // 8D ? ? ? ? ? 8B ? 8B ? E8 ? ? ? ? 85 ? 0F 85 ? ? ? ? 39 ? ? ? ? ?
const DWORD dwTeleportYOffset = 0x00008AAC; // 8D ? ? ? ? ? ? 8B ? E8 ? ? ? ? 6A ? 8B ? E8 ? ? ? ? 6A 00 68 ? ? ? ?
const DWORD dwTeleportXOffset = dwTeleportYOffset + 0x0C;

И для самого метода:

bool Teleport(_In_ int nX, _In_ int nY)
{
__try
{
{

DWORD dwUserLocal = *pdwUserLocal;
TSecType_long___SetData(dwUserLocal + dwTeleportToggleOffset, NULL, 0);
TSecType_long___SetData(dwUserLocal + dwTeleportXOffset, NULL, nX);
TSecType_long___SetData(dwUserLocal + dwTeleportYOffset, NULL, nY);
TSecType_long___SetData(dwUserLocal + dwTeleportToggleOffset, NULL, 1);
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return false;
}
return true;
}

0

Решение

Работая в предположении, что вы знаете, что такое typedef это (он берет тип данных и дает ему другое имя), все, что это — это функция typedef. Другими словами, TSecType_long___SetData_t это функция, которая занимает 3 DWORD аргументы и возвращает void,

В вашем случае кто-то априори знает, что адрес 0x00518430 содержит функцию, которую можно вызвать, учитывая TSecType_long___SetData_t API. Чтобы сделать этот адрес вызываемым, адрес переинтерпретируется как тип данных функции и присваивается переменной TSecType_long___SetData,

1

Другие решения

Как сказал @ris TSecType_long___SetData_t это просто объявление указателя на функцию, имеющее параметры. И следующая строка:

const TSecType_long___SetData_t TSecType_long___SetData = einterpret_cast<TSecType_long___SetData_t>(0x00518430);

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector