代码的远程调用涉及到以下技术难点
1.代码的拷贝:
DWORD CodeSize
=
0
;
DWORD CodeStart
=
0
;
_asm

...
{
mov eax, _end
sub eax, _begin
mov CodeSize, eax mov eax, _begin
mov CodeStart, eax
jmp _end
_begin:
//此处是具体的功能代码
_end:
}

//
计算要分配的空间
DWORD ToAllocateSize
=
CodeSize
+
sizeof
(
int
);

//
分配空间
LPVOID RemotePointer
=
VirtualAllocEx( RemoteProcess, NULL, ToAllocateSize, MEM_COMMIT
|
MEM_RESERVE, PAGE_EXECUTE_READWRITE);

//
拷贝代码
WriteProcessMemory(RemoteProcess, RemotePointer, reinterpret_cast
<
char
*>
(CodeStart), CodeSize, NULL);
//
释放分配的空间
VirtualFreeEx(RemoteProcess, RemotePointer, CodeSize, MEM_DECOMMIT);
VirtualFreeEx(RemoteProcess, RemotePointer,
0
, MEM_RELEASE);
2.参数的传递:参数传递的难点在于定位,在上面的基础上面继续完成参数的传递






































3.调用:调用实在是再简单不过的事情了,上面的代码完成之后,可以使用你可以想到的调用方式,目前有实际意思的是远程线程以及网络调用
远程线程的方法:










































网络调用可以把上述的代码进行修改之后,通过网络传输之后,由接受放负责调用