WriteProcessMemory to memcpy
WriteProcessMemory to memcpy
我想转换我的钩子方法,以更有效的方式。我当前的代码使用WriteProcessMemory()和GetCurrentProcess(),这是完全无用的。我认为一个简单的内存可以很容易地做同样的事情。下面是我尝试做的:
DWORD dwAddr = (DWORD)GetProcAddress(lpModule, lpFuncName);
BYTE jmp[6] = { 0xe9, 0x00, 0x00, 0x00, 0x00, 0xc3 };
memcpy((LPVOID)dwAddr, &jmp[0], 6);
//WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwAddr, jmp, 6, 0);
WriteProcessMemory API工作完美,但与我的自定义内存,它不工作。谁能告诉我我哪里失败了?
WriteProcessMemory()
的重点是写入另一个进程的虚拟内存。你不需要它来编辑你自己的进程虚拟内存。
但是,您必须确保您有权修改该特定地址中的数据。即使内存是你的,它也可能是只读的,并且系统内核强制这样做。
使用VirtualProtect()
来修改内存空间的权限。
另外,请注意,当您覆盖该地址中的数据时,您正在破坏原始函数代码。
如果你感兴趣的话,我有这个挂钩api的函数。它将PE表中的原始函数指针替换为您的指针,同时返回原始指针,以便稍后使用。不幸的是,它已经过时了,应该只适用于32位。
在这里使用memcpy
完全没有问题。但是,您需要使用VirtualProtect
将目的地的保护标志更改为PAGE_EXECUTE_READWRITE
。写完后恢复原始保护。
如果你的目标是x86/x64,这就是你所需要做的。对于其他架构,您需要调用FlushInstructionCache
。
存储指向DWORD
的指针也是错误的。不要强制转换GetProcAddress
的返回值。它是一个指针。
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- vector<vector<double>> to mxArray using memcpy
- memcpy unsigned char to int
- Memcpy to mallocd location
- 当从此到子类中的新对象时,将显示警告"destination for this 'memcpy' call is a pointer to dynamic class..."
- 编译器减少 std::copy to memcpy (memmove) 的条件是什么?
- 将C++ to memcpy uchar 翻译成 int64
- memcpy CString to char*
- memcpy of uint8_t to uint16_t
- C++ memcpy to char* from c_str
- WriteProcessMemory to memcpy