请问如何读取系统内存中任意地址的数据,如0x100,用C语言实现。

如定义structnode,然后任取一块内存((structnode*)0x100)->data,并显示结果,或进行比较判断,不需要可写,只需可读。C语言如何实现。回答的... 如定义struct node,然后任取一块内存((struct node*)0x100)->data,并显示结果,或进行比较判断,不需要可写,只需可读。C语言如何实现。回答的好会加分的 展开
 我来答
知足266
2014-12-11 · 超过57用户采纳过TA的回答
知道答主
回答量:117
采纳率:100%
帮助的人:104万
展开全部
首先要明确windows 的内存管理方式, (在 windows XP 非 3GB enabled)。 ring3程序也就是用户空间的进程可以用的空间地址是 virtual address 0x00000000 - 0x7FFFFFFF ,注意virual address 呵呵,而 0x80000000 以后为内核使用 都是 virtual address啊。ring3 进程不能读取 0x80000000 以后的地址。0x0000000 - 0x7FFFFFFF 也并不是都可以读取的。这个空间中会根据系统需要由系统分配一定的 region 或一系列的 regions。只有位于这些 regions 的地址是可以被ring3 进程读取的。所以比如任意地址 如 0x100 若这个地址不再任何一个 region 当中。就会出错(指定地址无内存)。实际上即是说,系统没有为 0x100 这个地址建立页表映射,也就不可读。 若你所说想要实现读取内核地址空间,也只能读取已经建立了页表映射的地址。不然同样要出错。 若想要判断一个地址是否是有效的,如你所担心的,用户可能传给你一个非法地址。可以用一些api 判断合法性。如 VirtualQuery 更强大的还有VirtualQueryEx。 http://msdn.microsoft.com/en-us/library/aa366902 (VS.85).aspx。 也可以用异常处理历程。 try except (c++),c也有异常处理 不过不好用。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式