如何在C#中从字节数组运行本机代码?

时间:2017-11-13 15:22:52

标签: c#

我使用以下代码从字节数组中运行本机代码:

const uint PAGE_EXECUTE_READWRITE = 0x40;
const uint MEM_COMMIT = 0x1000;

[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);

private delegate int IntReturner();


byte[] body = {<bytes>};
IntPtr buf = VirtualAlloc(IntPtr.Zero, (uint)body.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
Marshal.Copy(body, 0, buf, body.Length);

IntReturner ptr = (IntReturner)Marshal.GetDelegateForFunctionPointer(buf, typeof(IntReturner));
ptr();

但是当执行的代码终止时,整个应用程序也会退出。 如何在不终止整个程序的情况下使用该代码?

1 个答案:

答案 0 :(得分:0)

$expand

如果您正在使用控制台应用程序