【发布时间】:2021-03-20 00:07:27
【问题描述】:
所以我现在正在研究一个使用 NtQueryVirtualMemory 扫描其自身进程的内存区域的项目。它在 32 位上完美运行,但我在 64 位版本中不断收到 STATUS_ACCESS_VIOLATION (0xC0000005)。该错误意味着 BaseAddress 无效,但对于我使用的任何地址,我都会收到此错误,我不知道还能尝试什么。即使在我下面写的例子中,我仍然得到同样该死的无法解释的错误。
#include <stdio.h>
#include <Windows.h>
typedef enum _MEMORY_INFORMATION_CLASS {
MemoryBasicInformation
} MEMORY_INFORMATION_CLASS, *PMEMORY_INFORMATION_CLASS;
typedef NTSTATUS(NTAPI *PNTAPI)(
HANDLE ProcessHandle,
PVOID BaseAddress,
MEMORY_INFORMATION_CLASS MemoryInformationClass,
PVOID Buffer,
ULONG Length,
PULONG ResultLength
);
void main(void)
{
PNTAPI NtQueryVirtualMemory = (PNTAPI)GetProcAddress(
GetModuleHandle("ntdll.dll"), "NtQueryVirtualMemory");
MEMORY_BASIC_INFORMATION Mbi = { 0 };
NTSTATUS status = NtQueryVirtualMemory(NtCurrentProcess(), (PVOID)main, MemoryBasicInformation,
&Mbi, sizeof(MEMORY_BASIC_INFORMATION), 0);
printf("%.8X", status);
getchar();
}
我在谷歌上搜索了任何可能的原因,但没有任何结果。如果有人能对此事有所了解,我将不胜感激。操作系统是 Windows 10 64 位,编译器是 Microsoft Visual Studio 2015。提前致谢!
【问题讨论】:
标签: windows-10 64-bit