2013-07-08 125 views
0

所以我正在通过一些源代码来看,这一件事情让我难堪。我对C++很陌生,所以我很难理解这是什么。我真的不知道下面的typedef是什么,它在下面的代码中如何使用它。C++ typedef带参数和fastcall

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; 
} 
+3

你的问题到底是什么? – chris

+0

这是什么类型的代码?这是否可能是由一些C++解编译器产生的? (不知道有没有,但我无法想象这样的人类编写代码)。如果是这样,那么它的表现不是很好。 –

+1

@j_kubik,这是一个游戏的黑客(或至少看起来像一个)。不过,不太清楚使用保留标识符的所有长类型/名称的用途。 – chris

回答

1

,你知道typedef是什么(它采取一个数据类型,并给予它的另一个名字),都认为这是假设下工作 - 是函数typedef。换句话说,TSecType_long___SetData_t是一个需要参数3 DWORD并返回void的函数。

就你而言,某人有先验知识,地址0x00518430包含一个函数,可以调用TSecType_long___SetData_t API。为了使该地址可被调用,该地址被重新解释为函数数据类型并被分配给变量TSecType_long___SetData

0

就像@chris所说的TSecType_long___SetData_t只是一个函数指针的声明,因此有参数。而下面一行:

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

定义类型的变量,并为其分配一个值,在这种情况下,似乎是一个硬编码存储位置(我不知道那是来自)。所有其他事件只是简单的函数调用。
一点点在函数指针上应该给你任何你需要知道的关于它们。