是否可以從C#調用函數到結構中的非託管函數(通過VTable)。從VTable的struct中調用非託管函數
例如,我在進程中掛鉤一個應用程序,並且我正在爲每個類(應用程序)重新創建結構。
public struct SomeStruct {
[FieldOffset(0x00)]
public IntPtr * VTable;
[FieldOffset(0x10)]
public uint SomeValue;
}
然後,我通常會做:
var * data = (SomeStruct*)(Address);
我想調用從結構的虛函數表的功能在以下任一方式
Invoke<delegate>(data->VTable[0x3C])(delegateArguments)
或者
var eax = Invoke<Func<uint,uint>(data->VTable[0x3C])(arg1,arg2)
此外,可能會有效地完成(因爲這些vtable funcs可能被稱爲無數次)?
也許通過反射發射?
從我所知道的情況來看,編組必須在每次調用Invoke<>
函數時創建委託函數。
指向「VTable」字段的指針是否正確?這是一個指向指針的指針,在這種情況下,它似乎是多餘的。 – casperOne
@casperOne我認爲它是有意義的,如果你想把它作爲一個指針,所以你可以使用'data.VTable [0x3C]'而不是'ReadIntPtr()',正如你所建議的。 – svick
@svick只是想確保它正確地被帶過來。 – casperOne