【发布时间】:2015-01-22 20:40:42
【问题描述】:
我必须在 C 中扫描调用进程的内存空间。这是作业。我的问题是我不完全理解虚拟内存寻址。
我正在通过尝试读取和写入内存地址来扫描内存空间。我不能使用 proc 文件或任何其他方法。
所以我的问题是设置指针。
据我了解,“用户模式空间”从地址 0x0 开始,但是,如果我将函数的起点设置为 0x0,那么我不是在扫描当前进程的地址空间吗?您如何建议调整指针(如果有的话)以寻址父进程地址空间?
编辑:好的,很抱歉造成混乱,感谢您的帮助。我们不能使用 proc 文件系统,因为分配是为了让我们了解信号。
所以,基本上我将尝试读取然后写入每个内存页中的地址,以测试它是否为R、RW 或不可访问。为了看看我是否成功,我将倾听某些信号——我还不确定如何去做那部分。我将创建一个结构链表来表示内存的可访问性。该程序将被编译为 32 位程序。
关于父进程和子进程:确切的文本状态
调用时,函数会扫描调用进程的整个内存区域...
也许我对孩子和父母的互动有误,因为我们已经在课堂上讨论过这个(fork 函数等),所以我假设我的函数将扫描一个父进程。我将要求教授澄清。
所以,从这张图片来看,我只是从 0x0 开始。
【问题讨论】:
-
进程的一个主要目的是隔离内存访问。父进程中的任何数据都不能在子进程中直接寻址。而且地址空间通常不会从 0 开始。如果是这样,那么不幸的是空指针是有效的,这使得涉及访问空指针的错误更难找到。
-
好吧,如果您不能“使用 proc 文件 或任何其他方法”(已添加重点),那么您将无法解决问题。您所做的任何事情都会构成 some 方法,即使是您自己设计的方法之一。我了解(我认为)您不允许访问
/proc文件系统中的文件,但可接受的解决方案的实际限制尚不清楚。 -
编辑您的问题以改进它!为什么不能使用
/proc/? -
你确定明白老师对你的期望吗?您能否提供更多背景信息?