所以我正在查看一些源代码,这一件事让我很难过。我是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 :(得分:1)
假设您知道typedef
是什么(它正在采用数据类型并给它另一个名称),所有这一切 - 是一个函数typedef。换句话说,TSecType_long___SetData_t
是一个函数,它接受3 DWORD
个参数并返回void
。
在您的情况下,某人有先验知识,地址0x00518430包含可以在TSecType_long___SetData_t
API下调用的函数。为了使该地址可调,该地址被重新解释为函数数据类型并分配给变量TSecType_long___SetData
。
答案 1 :(得分:0)
就像@chris所说TSecType_long___SetData_t
只是一个指向函数的指针的声明,因此有参数。以下一行:
const TSecType_long___SetData_t TSecType_long___SetData = einterpret_cast<TSecType_long___SetData_t>(0x00518430);
定义了该类型的变量并为其赋值,在这种情况下,它似乎是一个硬编码的内存位置(我不知道它来自哪里)。所有其他事件只是简单的函数调用 在函数指针上进行一些小搜索应该可以为您提供有关它们的任何信息。