有没有人知道如何将以下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>
答案 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调用分配可执行内存,在那里复制你的代码,然后使用上面的方法来执行它。