c - 使用驱动程序从特定位置读取 RAM 数据?

标签 c winapi memory driver bsod

我正在尝试从 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 运行这个:-) 我一直以为只有app程序没有权限直接从内存中读取。

现在我的问题是驱动程序使用直接物理地址还是虚拟地址??? 我的意思是 &pointer 返回物理或虚拟值的类型,如驱动程序编程(Ring 1 或 2)。我知道 Ring 3 应用程序将返回虚拟地址。 是的,我已经开始阅读驱动程序书籍,只是想更快地了解。

最佳答案

不,内核使用虚拟地址。这与环无关,它们只影响页面访问权限。如果您想访问物理地址,请查看“MmMapIoSpace”( here )内核函数。返回的指针适合内存访问。

关于c - 使用驱动程序从特定位置读取 RAM 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8707980/

相关文章:

c - gets_s() 预期行为

c++ - IAR中表达式必须有常量值错误如何解决?

c - 我的简单列表仅打印 .txt 文件的最后一个元素

python - 创建 python win32 服务

c++ - 检查服务是否来自 Microsoft

c++ - 如何在 MSVC 中获取成员函数指针?

c++ - void* 指针问题

c++ - 类方法访问它的数据成员

android - Drawable 占用的内存是否比 Bitmap 少?

GCC 编译时命令提示符卡住