2013-07-08 48 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); 

定義類型的變量,併爲其分配一個值,在這種情況下,似乎是一個硬編碼存儲位置(我不知道那是來自)。所有其他事件只是簡單的函數調用。
一點點在函數指針上應該給你任何你需要知道的關於它們。