我试图通过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;博士 试图读取内存,获得分段错误;我该如何避免它们?有什么其他选择吗? (最好不要求管理员权限)
其他信息:
感谢您的回答
答案 0 :(得分:0)
首先要做的事情是:您运行的是使用虚拟内存的操作系统,您的进程只能使用并查看虚拟地址,并且有一个地址空间(禁止某些共享)只读页面与其他进程的地址空间分开且不同。
这意味着除非操作系统可能会暴露特殊的API,否则您无法从用户空间程序中扫描所有物理内存。< / p>
你应该明白为什么这是一件好事。如果操作系统允许随机用户空间prorgams扫描整个物理内存,那将是一个巨大的安全漏洞。
您的程序崩溃了,因为您正在访问尚未映射到任何内容的虚拟地址。