首页 > 解决方案 > 验证正在访问的地址是否是汇编中进程内存的一部分

问题描述

我怎么知道我要访问的地址是进程内存的一部分?我的意思是,例如,如果我尝试在随机进程mov eax, [0x010]中执行此操作,它将崩溃,因为0x10不在进程的内存中,这与使用寄存器的间接内存访问一样。

因此,如果有一种方法可以在访问之前验证地址是否可以被进程自己的代码读取/写入?

标签: windowsassemblymemoryx86

解决方案


除了通过访问页面并捕获操作系统发送给您以访问无效页面的信号或异常之外,没有其他方法可以确定页面是否可访问。

这是因为您的操作系统的分页机制会捕获页面错误,然后确定该页面是否应该有内存。如果是,它会分配内存并将页表配置为指向该内存。然后它重新启动您的程序,该程序访问新分配的页面,就好像它一直都在那里一样。由于硬件不知道这是操作系统计划执行的操作,因此它无法告诉您页面是否有效,即使它有办法这样做。

考虑查看操作系统特定的机制来枚举进程的内存映射。例如,在 Linux 上,您可以检查 proc 文件系统以获取内存映射。使用此内存映射,您可以检测是否为您的进程分配了哪些地址范围。


推荐阅读