.NET ile inline ASM yazabilmenin dayanılmaz hafifliği (VB / C#)

16-7-2005

Devin Jenson's WebLog' ynda Dynamically Writing and Executing Native Assembly in C# başlığı altında harika bir iş yapılmış, .NET altında direk ASM kullanılarak kod çalıştırılmış. Bu bildiğimiz gibi C/C++ gerektiğinde rahatlıkla kullanabildiğimiz bir şey ancak managed kodda bunu yapmak çok keyifli.

Bunun yapılabildğini bilmiyordum, bende kodun VB.NET versiyonunu yazdım;

.NET Framework 2 gerekiyor;

Private Delegate Function _MyAdd(ByVal x As Integer, ByVal y As Integer) As Integer

Sub Main()

'A simple Add function
Dim myAddNativeCodeBytes As Byte() = { _
&H8B, &H44, &H24, &H8, _
&H8B, &H4C, &H24, &H4, _
&H3, &HC1, _
&HC2, &H8, &H0 _
}

'We need to push the code bytes into a native buffer
Dim myAddNativeCodeBytesPtr As IntPtr = IntPtr.Zero

'Allocate the native buffer
myAddNativeCodeBytesPtr = Marshal.AllocCoTaskMem(myAddNativeCodeBytes.Length)

'Push the code bytes over
Marshal.Copy(myAddNativeCodeBytes, 0, myAddNativeCodeBytesPtr, myAddNativeCodeBytes.Length)

Dim MyAdd As _MyAdd
MyAdd = CType(Marshal.GetDelegateForFunctionPointer(myAddNativeCodeBytesPtr, GetType(_MyAdd)), _MyAdd)

Console.WriteLine(MyAdd(10, 20))

End Sub

Recent Blog Posts

See all of the blog posts