我试图从我的32位进程向64位Windows进程注入一个存根,然后在x64进程中远程启动一个线程。这导致了一些问题,因为winapi的CreateRemoteThread正在抛出错误代码5,转换为ERROR_ACCESS_DENIED
,无论我在调用OpenProcess时使用哪个标记。我读到这是因为Windows不允许注入"跨平台"但我不认为这是问题,因为代码注入正常。
我在调用GetLastError()
后立即使用CreateRemoteThread()
,并显示错误代码5.
我正在为OpenProcess
使用这组标志,但没有成功:
PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE
以及PROCESS_ALL_ACCESS
。
任何人都知道可能导致此错误的原因是什么?
答案 0 :(得分:3)
不支持从32位进程调用CreateRemoteThread
,其中目标进程为64位。您需要从64位进程调用CreateRemoteThread
。
答案 1 :(得分:0)
无法完成。您无法在64位进程中运行32位代码,并且无法在32位进程中运行64位代码。
解决方案是将注入代码重建为64位。
这是设计的。处理器在32位和64位模式下根本不能完全相同,您可以轻松地从一种模式切换到另一种模式,然后再返回。有几件事情有很大不同:
void foo(int x, int y)
将获得覆盖x
和x
的64位y
。这会影响堆栈上变量的偏移以及函数内的所有其他内容。还有许多其他的东西也有所不同,但这些东西应足以表明"它不会像那样#34;