求助,各位请帮我看这个汇编内联问题,谢谢!
是这样的:
有 1段 在 C++ 里的代码
__asm
{
_emit 0xEB
_emit 0x0E
_emit 0x56
_emit 0x4D
_emit 0x50
_emit 0x72
_emit 0x6F
_emit 0x74
_emit 0x65
_emit 0x63
_emit 0x74
_emit 0x20
_emit 0x65
_emit 0x6E
_emit 0x64
_emit 0x00
}
int i = 0;
__asm
{
_emit 0xEB
_emit 0x0E
_emit 0x56
_emit 0x4D
_emit 0x50
_emit 0x72
_emit 0x6F
_emit 0x74
_emit 0x65
_emit 0x63
_emit 0x74
_emit 0x20
_emit 0x65
_emit 0x6E
_emit 0x64
_emit 0x00
}
在 c++ 里是可以编译执行的
我想把它改为 C# 代码
namespace HuiBianTest2
{
delegate void AddProc();
delegate void AddProc2();
class Program
{
static void Main(string[] args)
{
byte[] codeBytes =
{
0xEB,
0x10,
0x56,
0x4D,
0x50,
0x72,
0x6F,
0x74,
0x65,
0x63,
0x74,
0x20,
0x62,
0x65,
0x67,
0x69,
0x6E,
0x00
};
int i = 0;
IntPtr handle = IntPtr.Zero;
handle = VirtualAlloc(IntPtr.Zero, codeBytes.Length,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
Marshal.Copy(codeBytes, 0, handle, codeBytes.Length);
AddProc add = Marshal.GetDelegateForFunctionPointer(handle, typeof(AddProc)) as AddProc;
add( );
byte[] codeBytes2 =
{
0xEB,
0x0E,
0x56,
0x4D,
0x50,
0x72,
0x6F,
0x74,
0x65,
0x63,
0x74,
0x20,
0x65,
0x6E,
0x64,
0x00
};
IntPtr handle2 = IntPtr.Zero;
handle2 = VirtualAlloc(IntPtr.Zero, codeBytes2.Length,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
Marshal.Copy(codeBytes2, 0, handle2, codeBytes2.Length);
AddProc2 add2 = Marshal.GetDelegateForFunctionPointer(handle2, typeof(AddProc2)) as AddProc2;
add2();
}
//Windows API
[DllImport("Kernel32.dll", EntryPoint = "VirtualAlloc")]
public static extern IntPtr VirtualAlloc(IntPtr address, int size, uint allocType, uint protect);
[DllImport("Kernel32.dll", EntryPoint = "VirtualFree")]
public static extern bool VirtualFree(IntPtr address, int size, uint freeType);
//flags
const uint MEM_COMMIT = 0x1000;
const uint MEM_RESERVE = 0x2000;
const uint PAGE_EXECUTE_READWRITE = 0x40;
const uint MEM_RELEASE = 0x8000;
}
}
执行 add( ); 就出现错误了
我想
byte[] codeBytes =
{
0xEB,
0x10,
0x56,
0x4D,
0x50,
0x72,
0x6F,
0x74,
0x65,
0x63,
0x74,
0x20,
0x62,
0x65,
0x67,
0x69,
0x6E,
0x00
};
这段代码我写错了,但是知道怎么写?
请各位大哥帮我看看是哪里错了
应该怎么改
谢谢!