C#中的内联ASM

时间:2014-12-16 18:35:20

标签: c# assembly x86 inline-assembly

有没有人知道如何将以下C内联ASM转换为有效的C#格式?提前谢谢。

DWORD WINAPI RemoteExecPayloadStub(LPVOID lpParameter) {
__asm {
    mov eax, [lpParameter]
    call eax
    push 0
    call ExitThread
}
return 0;

}

修改

尝试将ASM转换为类似的字节码(如下所示),并从字节数组中使用它,但似乎没有按预期工作。感谢。

    0:  a1 00 00 00 00          mov    eax,ds:0x0
5:  ff d0                   call   eax
7:  6a 00                   push   0x0
9:  e8 fc ff ff ff          call   a <_main+0xa>

1 个答案:

答案 0 :(得分:3)

由于人们似乎完全困惑,我会在这里回答这个,即使它是重复的。

给定的代码除了调用函数指针之外什么都不做,然后退出线程。因此,等效的C#代码可以是:

delegate void FuncPtr();
static void RemoteExecPayloadStub(IntPtr lpParameter)
{
    FuncPtr ptr = Marshal.GetDelegateForFunctionPointer<FuncPtr>(lpParameter);
    ptr();
}

对于ExitThread,你可以使用Thread.CurrentThread.Abort()或pinvoke winapi功能(不推荐)。

执行任意机器代码也不是更困难。把你的东西放到一个字节数组中,使用适当的pinvoke调用分配可执行内存,在那里复制你的代码,然后使用上面的方法来执行它。