2017-02-20 26 views
1

我目前正在對一個程序進行反向工程,以瞭解它是如何工作的,並且剛剛完成了一個程序調用的函數的反彙編。函數的起始地址存儲在一個指針中,它需要4個參數。我的目標是現在將指針作爲可調用的函數。C++拿一個指針並將它變成一個可調用函數

我已經在一兩年前看到過這個功能,但不再能夠訪問使用過的示例代碼。從本質上講,我想利用一個指向函數的開始的指針,並把它轉換成這樣:

void AddValueToMain(void* basePtr, unsigned int value, __int64 compareValue, __int64 ONE_BILLION); 

我怎樣才能施放此指針,這樣我可以調用該函數,就好像它是用C++編寫?

+0

這是可能的,但是編譯器相關。您需要某種替代方法,例如指向函子的指針。 – user1095108

回答

4

您可以reinterpret_cast函數指針。假設m_ptr持有的指針功能:

auto AddValueToMain = reinterpret_cast<void(*)(void*,unsigned int,__int64,__int64)>(m_ptr); 

現在,您可以撥打AddValueToMain就像一個正常的功能:

AddValueToMain(ptr, 42, 2, 4); 
+0

謝謝!除此之外,如果我只有該函數的基地址(假設它是0xDEADBEEFDEADBEEF),我是否也可以像'auto AddValueToMain = reinterpret_cast 0xDEADBEEFDEADBEEF)' – w0ffen

+0

是的。整數和指針之間的映射是實現定義的,但是如果你的平臺支持它,那麼這是一種獲得你想要的方式。 – TartanLlama

相關問題