扫描所有物理内存

Scanning all physical memory

我正在尝试通过 nasm 扫描我的所有内存以查找特定变量。 我当前的代码看起来有点像这样:

%include "io64.inc"
%define VAR 1234
section .text
global main
main:
    mov     rax, 0x0
nxt:
    mov     rbx, [rax]
    cmp     rbx, VAR
    je      end
    inc     rax
    jmp     nxt
end:
    PRINT_HEX 8,rax
    ret

我的问题是这迟早会产生分段错误(根据起始地址,它可能 运行 几个周期然后失败)。在谷歌搜索方法时,我没有找到关于该主题的任何答案。我怀疑 cs 和 ss 寄存器可能必须对它做些什么,但我不知道具体是怎么做的。 我知道作弊引擎能够做到这一点,所以必须有办法做到这一点。

tl;博士 尝试读取内存,出现分段错误;我该如何避免它们?还有哪些其他选择? (最好不需要管理员权限)

附加信息:

感谢您的任何回答

第一件事:您 运行 在使用虚拟内存的 OS 上,您的进程只能使用并看到 虚拟 地址,并且有一个地址 space(除了一些共享的只读页面)与其他进程的地址 space 分开且不同。

这意味着除非 OS 可能公开的特殊 API,否则根本无法从 用户扫描所有 物理 内存space 程序。

你应该明白为什么这是一件好事。如果 OS 允许随机用户 space 程序扫描整个物理内存,那将是一个巨大的安全漏洞。

您的程序正在崩溃,因为您正在访问尚未映射到任何内容的虚拟地址。