扫描所有物理内存

时间:2016-10-18 16:25:08

标签: windows assembly nasm x86-64

我试图通过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:Win 10 Pro 64bit
  • CPU:Intel(R)Core(TM)i5-4210M@2.60GHz 2核心,4个线程
  • RAM:8gb DDR3

感谢您的回答

1 个答案:

答案 0 :(得分:0)

首先要做的事情是:您运行的是使用虚拟内存的操作系统,您的进程只能使用并查看虚拟地址,并且有一个地址空间(禁止某些共享)只读页面与其他进程的地址空间分开且不同。

这意味着除非操作系统可能会暴露特殊的API,否则您无法从用户空间程序中扫描所有物理内存。< / p>

你应该明白为什么这是一件好事。如果操作系统允许随机用户空间prorgams扫描整个物理内存,那将是一个巨大的安全漏洞。

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

相关问题