|
10精币
如果不开游戏保护读写是正常的,开了就读的不对
但是不管开不开游戏保护区模块都是正确的。
读写代码:
void ReadVirtual(LPVOID src, LPVOID dest, size_t sz);
void WriteVirtual(LPVOID src, LPVOID dest, size_t sz);
template <typename DataType> DataType maxread(ULONG64 address)
{
DataType pBuffer;
ReadVirtual((PVOID)address, &pBuffer, sizeof(DataType));
return pBuffer;
}
template <typename DataType> void maxwrite(ULONG64 address, DataType value)
{
WriteVirtual((PVOID)address, &value, sizeof(DataType));
}
void ReadVirtual(LPVOID src, LPVOID dest, size_t sz)
{
if (IsBadReadPtr(src, sz))
{
RtlZeroMemory(dest, sz);
return;
}
RtlCopyMemory(dest, src, sz);
}
void WriteVirtual(LPVOID src, LPVOID dest, size_t sz)
{
if (IsBadReadPtr(src, sz))
return;
DWORD oldProtect = 0;
VirtualProtect(src, sz, PAGE_EXECUTE_READWRITE, &oldProtect);
RtlCopyMemory(src, dest, sz);
VirtualProtect(src, sz, oldProtect, &oldProtect);
}
补充内容 (2024-6-12 15:03):
解决了。内部和外部不一样好像,你的数据类型都能改变你的最后调试出来的东西 |
最佳答案
查看完整内容
template
T Read(DWORD64 Address)
{
if (!IsBadReadPtr((PVOID)Address, sizeof(T)))
return *(T*)Address;
}
template
void Write(DWORD64 dwPtr, const T value)
{
if (!IsBadWritePtr((void*)dwPtr, sizeof(T)))
*(T*)dwPtr = value;
}
补充内容 (2024-6-12 09:00):
指针读写
|