gpt4 book ai didi

c++ - 为什么有些函数需要作为DLL文件注入(inject)才能工作

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:17 26 4
gpt4 key购买 nike

所以我最近一直在学习C++,有这部分我无法理解,我看到有人在他注入(inject)的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);}

但是当我在一个普通脚本中尝试这个函数时,我的程序一直在崩溃,那么为什么需要先注入(inject)它,注入(inject) DLL 文件有什么意义呢?

最佳答案

memcpy 是一个函数,旨在用于您拥有的内存,而且只能用于您拥有的内存。它只会在调用它的当前进程中工作。

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

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

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

当这个人将模块注入(inject)另一个进程时,该模块现在基本上是该进程的一部分,因此可以使用 memcpy。就好像进程自己加载了模块一样。该模块是"new"当前进程的一部分……也称为注入(inject)进程。

关于c++ - 为什么有些函数需要作为DLL文件注入(inject)才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com