2011-10-09 46 views
0

是否可以爲包含函數的字節數組分配虛擬內存,將數組寫入內存,然後以某種方式在虛擬內存中執行函數?函數在BYTE數組中直接記憶?

+0

「包含函數的字節數組」是一個過於寬泛的規範。什麼表示?什麼操作系統?什麼硬件架構?沒有重大的澄清,你的問題就不能得到回答。 –

+0

任何特定的編程語言? – GolezTrol

+0

C++。視窗。表示形式是機器代碼(或者有效的代碼)。 x86和x86-64 – replicant

回答

0

你必須確保你要執行的字節確實是一個有效的CPU指令序列,否則「函數」肯定會崩潰,比如導致異常「非法指令」,「訪問衝突」等。

接下來要做的是確保有問題的字節位於具有執行權限的記憶。 VirtualProtectPAGE_EXECUTE讓你。

然後你實際上將控制權交給你的功能。這可以是彙編代碼,例如push <address>; ret;或C++風格的靜態函數調用,地址在變量中。

+0

你能否解釋一下我將如何使用包含地址的指針的靜態函數來調用它? – replicant

+0

類似於您如何通過GetProcAddress API獲取函數地址並將其轉換爲您需要的類型。在你的情況下,這個函數入口點就是你的數據數組。 –

+0

我會在hModule參數中使用什麼?當前進程的句柄? – replicant