-
-
未解决
[求助]NtProtectVirtualMemory 失败的很奇怪
-
发表于:
2020-9-13 22:50
4917
-
未解决 [求助]NtProtectVirtualMemory 失败的很奇怪
KernelMode模式下
ULONG ProtectSize = 4;
NTSTATUS xx = NtProtectVirtualMemory(
ProcessHandle,
&BaseAddress,
&ProtectSize,
PAGE_EXECUTE_READWRITE,
&OldProtect);
DbgPrint("NtProtectVirtualMemory %x %x\n", NT_SUCCESS(xx), xx);
调用成功。xx的值是0。没问题
但是如果
ULONG ProtectSize = 4;
NTSTATUS xx = NtProtectVirtualMemory(
ProcessHandle,
&BaseAddress,
&ProtectSize,
PAGE_EXECUTE_READWRITE,
&OldProtect);
DbgPrint("NtProtectVirtualMemory BaseAddress %llx ProtectSize %x\n", BaseAddress, ProtectSize);
DbgPrint("NtProtectVirtualMemory %x %x\n", NT_SUCCESS(xx), xx);
仅仅是多加了一行DbgPrint 。函数就会调用失败。返回值0xC00000F1。查询代码 是说参数3无效。。。我反复检查了参数3,都没问题。。。
这是为什么呢? 想不通为啥 多一行DbgPrint 就调用失败了。。
Zw函数有个重要工作是把PreviousMode设置成KernelMode 。因为Zw还要定位,所以我调用的Nt函数,,并且调用前,将PreviousMode设置成KernelMode 。所以调用成功了。。。但是增加一行 输出函数就会失败。。实在不解。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2020-9-14 19:31
被简单选择编辑
,原因: