我已经注入到另一个应用程序中,并且我想要调用这个“用户调用”函数。所以我编写了一个简单的 ASM 包装器,它只是将我的参数对齐到正确的寄存器上并调用该函数。
这是我将 ASM 字节放入应用程序的代码。
ASMWrapper = Marshal.AllocCoTaskMem(asm.Length);
Marshal.Copy(asm, 0, ASMWrapper, asm.Length);
在此之后,我只需在这个位置注册一个 delagate,我就可以走了。现在有趣的是,这适用于我测试的 5 台计算机中的 4 台,最后一台我尝试使用干净的 Windows 7 Ultimate 格式化和安装。就像其他电脑一样。它仍然不起作用。
不过,我能做的就是WriteProcessMemory
用来编写我的 ASM 代码。如果我这样做它会起作用,那么我可以将代码放在原始代码所在的位置。
有谁知道它为什么会这样?我宁愿使用这种AllocCoTaskMem
方式来放置我的 asm,而不是试图找到手动放置它的地方。