为什么有些函数需要作为DLL文件注入才能工作

时间:2015-03-18 19:47:18

标签: c++ windows memory dll inject

所以我最近一直在学习C ++,有一部分我无法理解,我看到有人在他注入的dll文件中使用了这个函数:

void WriteToMemory(DWORD AddressToWrite, char* ValueToWrite, int byteNum){
unsigned long oldProtection;
VirtualProtect((LPVOID)AddressToWrite, byteNum, PAGE_EXECUTE_READWRITE, &oldProtection);memcpy((LPVOID)AddressToWrite, ValueToWrite, byteNum);

VirtualProtect((LPVOID)AddressToWrite, byteNum, oldProtection, NULL);}

但是当我尝试使用普通脚本的这个函数时,我的程序一直在破碎,那么为什么需要先注入它以及注入DLL文件的重点是什么?

1 个答案:

答案 0 :(得分:0)

memcpy是一个用于你拥有的内存的函数,只有那个。它只能在当前调用它的过程中工作。

每个进程都有自己的内存。一个进程可以在0x14141处分配一些进程,另一个进程可以在0x14141处分配,并且它不会发生冲突,因为该地址是该进程的本地地址。 memcpy的工作方式相同。它复制到当前进程的地址,不会影响其他进程的内存。

当您尝试在另一个进程拥有的内存上使用它时,如果内存未共享/映射,它将崩溃。它实际上是复制到当前进程的那个地址而不是另一个进程。

另一方面,如果您拥有正确的权限/访问权限,WriteProcessMemory将对属于其他进程的内存起作用。

当这个人将模块注入另一个进程时,该模块现在基本上是该进程的一部分,因此可以使用memcpy。这就好像进程加载了模块本身。该模块是“新”当前流程的一部分。也就是注入流程。