我正在尝试从 0x00000001 读取 RAM 数据并将其复制到硬盘中的文件(只是学习!)所以我写了这个并编译并运行它
#include <ntddk.h>
void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
DbgPrint("Driver Unloaded!");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
DWORD *pointer;
pointer = 0x00000001;
DriverObject->DriverUnload = DriverUnload;
DbgPrint("Driver Loaded!\n");
DbgPrint("Data at 0x00000000 is %x\n",*pointer);
return STATUS_SUCCESS;
}
所以我得到了 BSOD 幸运的是我使用我的 Vmware 运行它:-) 我一直认为只有应用程序没有直接从内存读取的权限。
现在我的问题是驱动程序使用直接物理地址还是虚拟地址???我的意思是在驱动程序编程(环 1 或环 2)的情况下,&pointer 返回物理或虚拟的值是什么类型。我知道环 3 应用程序将返回虚拟地址。是的,我已经开始阅读驱动程序书籍,只是想更快地了解。