2010-09-05 73 views
0

我有一個hack程序;它將一些功能注入目標進程以控制它。該程序使用內聯彙編以C++語言編寫。任意指向未知類功能的指針 - 無效類型轉換

class GameProcMain { 
// this just a class 
}; 

GameProcMain* mainproc; // there is no problem I can do =(GameProcMain*)0xC1EA90 

現在我想定義一個類函數(將ecx設置爲類指針)而不是編寫程序集。

PPLYDATA GetNearblyMob(__Vector3* cordinate) { 
    __asm { 
    mov ecx, 0xC1EA90 
    enter code here 
    push cordinate 
    mov edi, 0x4A8010 
    call edi 
    } 
} 

我想定義它,並調用它。

PPLYDATA (DLPL::*GetNearblyMob)(__Vector3* cordinate); 

mainproc->GetNearblyMob(ADDR_CHRB->kordinat) 

當我嘗試GetNearblyMob=(PPLYDATA (DLPL::*)(__Vector3*)) 0x4A8010;

它說像error: invalid type conversion: "int" to "PPLYDATA (DLPL::*)(int, int)"

,但我可以做到這一點,設置指針:

void initializeHack() { 
__asm { 
LEA edi, GetNearblyMob 
MOV eax, 0x4A8010 
MOV [edi], eax 
} 
} 

現在我要學「哪能設置GetNearblyMob而不使用程序集並在C++中合法「。

+4

你可能不打算在這裏找到太多幫助,讓你的遊戲作弊代碼工作。 – msw 2010-09-05 02:16:29

+1

作弊有甚麼錯誤?就我個人而言,我學到了很多裝配學習在ZX-80遊戲中作弊。 – user434507 2010-09-05 02:25:11

+0

msw,但是我的破解工作,並將工作沒有這個東西..我只是想編譯生成智能彙編代碼,而不是我自己。因爲我組裝了很多功能,http://img268.imageshack.us/img268/3432/hackzv.jpg ps hamster3null,再次感謝你,我也學會了使用作弊的程序集,我可以使用很多調試器破解應用程序和hook directx。 – 2010-09-05 02:27:38

回答

1

的問題是,成員函數自動獲得了this指針一個額外的參數。有時你可以在成員函數和非成員函數之間進行投射,但我不認爲需要投射任何東西。

通常情況下,對C函數進行反向工程比對C++更容易。 C通常具有更直接的ABI,因此您可以在數據結構出來時保持直觀。

所以,我建議

PPLYDATA (*GetNearblyMob)(DLPL *main_obj, __Vector3* cordinate) = 0x12345UL; 

,然後定義自己的功能

class DLPL { 
    GetNearblyMob(__Vector3* cordinate) { 
     return ::GetNearblyMob(this, cordinate); 
    } 
    // ... other program functions 
}; 
+0

謝謝,我會用它。 – 2010-09-05 10:00:51

1

我有點驚訝,它不會像你那樣。

你可以嘗試這樣做

GetNearblyMob=reinterpret_cast<PPLYDATA (DLPL::*)(__Vector3*)> (0x4A8010); 

如果仍然無效,請嘗試

*(int*)(&GetNearblyMob) = 0x4A8010; 
+0

謝謝你的回答。 首先是給出這個錯誤。 (DLPL :: *)(int,int)>(0x4A8010);返回頁首返回頁首返回頁首返回頁首返回頁首返回頁首返回頁首 第二個是給出表達式是不可編輯的,當我刪除&關鍵字它給無效類型轉換:「PPLYDATA(DLPL :: *)(int,int)」到「int」 但它適用於非類功能指針...int(__stdcall * GetCurrentZone)()=(int(__stdcall *)())0x49B070; – 2010-09-05 02:23:27

+0

p.s.我想單擊答案是有用的按鈕,但它不適用於我的帳戶:) – 2010-09-05 02:24:45

+0

第二個選項適用於我在gcc中。 「表情不可編輯」?這是一個奇怪的錯誤。什麼是確切的措辭?也許函數指針被聲明爲const? – user434507 2010-09-05 02:33:05