我想编写一个 C++ 程序,该程序将被编译为 dll 并注入到 C++ uwp 应用程序中。
该程序应该修补特定地址处的字节。 例如,出于某些目的,我们想用
0x12345678
修补地址 {0x01, 0x02, 0x03}
。
我使用普通的 Windows api 为其编写了一个简单的程序:
void PatchMemory(LPVOID address, BYTE* data, SIZE_T size) {
DWORD oldProtect;
int result;
HANDLE hProcess = GetCurrentProcess();
if (hProcess == INVALID_HANDLE_VALUE) {
Log::Warning("Patch unsuccessful...");
return;
}
result = VirtualProtect(address, size, PAGE_EXECUTE_READWRITE, &oldProtect);
if (result != 0) {
Log::Warning("Patch unsuccessful... code: {}", result);
return;
}
result = WriteProcessMemory(GetCurrentProcess(), address, data, size, nullptr);
if (result != 0) {
Log::Warning("Patch unsuccessful... code: {}", result);
return;
}
result = VirtualProtect(address, size, oldProtect, &oldProtect);
if (result != 0) {
Log::Warning("Patch unsuccessful... code: {}", result);
return;
}
Log::Info("Patch successful!");
}
但现在可悲的是...我无法在我的dll中使用这些api,因为它们不能在将注入dll的程序的沙盒uwp环境中工作。
现在我想知道:
祝大家有美好的一天,并希望这个问题能够尽快得到解决......
编辑:
这不是出于恶意目的。这是为了修改 Minecraft 基岩版并增加下界的建筑高度限制。
“出于某些目的”嗯 – 约翰
这是一个非常有用的回复,谢谢约翰