扫描所有物理内存
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: Win 10 专业版 64 位
- CPU:英特尔(R) 酷睿(TM) i5-4210M@2.60GHz 2 核,4 线程
- 内存:8GB DDR3
感谢您的任何回答
第一件事:您 运行 在使用虚拟内存的 OS 上,您的进程只能使用并看到 虚拟 地址,并且有一个地址 space(除了一些共享的只读页面)与其他进程的地址 space 分开且不同。
这意味着除非 OS 可能公开的特殊 API,否则根本无法从 用户扫描所有 物理 内存space 程序。
你应该明白为什么这是一件好事。如果 OS 允许随机用户 space 程序扫描整个物理内存,那将是一个巨大的安全漏洞。
您的程序正在崩溃,因为您正在访问尚未映射到任何内容的虚拟地址。
我正在尝试通过 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 专业版 64 位
- CPU:英特尔(R) 酷睿(TM) i5-4210M@2.60GHz 2 核,4 线程
- 内存:8GB DDR3
感谢您的任何回答
第一件事:您 运行 在使用虚拟内存的 OS 上,您的进程只能使用并看到 虚拟 地址,并且有一个地址 space(除了一些共享的只读页面)与其他进程的地址 space 分开且不同。
这意味着除非 OS 可能公开的特殊 API,否则根本无法从 用户扫描所有 物理 内存space 程序。
你应该明白为什么这是一件好事。如果 OS 允许随机用户 space 程序扫描整个物理内存,那将是一个巨大的安全漏洞。
您的程序正在崩溃,因为您正在访问尚未映射到任何内容的虚拟地址。