2013-05-29 27 views
0

我有指向一個地址的函數指針。如何在一個進程中清空一個函數

#define CSpellBookWnd__MemorizeSet         0x557CD8 

    #define FUNCTION_AT_ADDRESS(function,offset) __declspec(naked) function\ 
{\ 
    __asm{mov eax, offset};\ 
    __asm{jmp eax};\ 
} 

FUNCTION_AT_ADDRESS(void CSpellBookWnd::MemorizeSet(int *,int),CSpellBookWnd__MemorizeSet); 

我只是想,而不是調用該函數做一些NOP的

+0

我不太明白。你能提供一個預期用途的例子嗎?你的意思是「修改'FUNCTION_AT_ADDRESS',這是NOP嗎?」或者只有一些時間? – Angew

回答

0

如果要覆蓋一個功能,你不能做到這一點,通常,由於內存頁的保護。如何在內存頁面上設置保護標誌取決於操作系統。儘管如此,不需要彙編程序。

0

該代碼看起來就像創建一個轉發方法,該方法將重定向到其他地方定義的實現。如果你想方法什麼都不做,而不是,只是刪除了FUNCTION_AT_ADDRESS呼叫,並定義自己的空方法:

void CSpellBookWnd::MemorizeSet(int *,int) {} 
相關問題