C-如何判断指定的内存地址是否有可读写权限?

发布于 2017-01-05 21:02:00 字数 114 浏览 1579 评论 2

用gdb调试程序时, 用x命令可以打印内存值, 当内存不可读时, 会显示"Cannot access memory at address ...", 请问下gdb是如何判断某个内存区域是否可读写的呢?请高手指教。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-10-10 13:17:32

是根据cpu(如x86)体系结构中的地址转译判断的。
CPU要处理一个地址时,首先判断此虚拟地址指定的段,此段是否可读写以及特权级,内核空间可指定所属段的特权级,使应用程序不能访问。
CPU再根据段转译的线性地址(未开启PAE下包括页目录索引、页表索引、页内偏移)定位到页表项,再由此页表项(PTE)的W(写)、U(写 多处理器用)位判断是否可写。由页表项最终定位到物理地址。

瑾兮 2017-07-06 02:22:39

gdb的源码层次很深,看起来挺麻烦的,attach到目标进程之后,可以使用mach api进行目标内存空间的内存读取操作,mach_vm_region在读取的时候会返回该region的属性,基本上有VM_PROT_READ,VM_PROT_WRITE和VM_PROT_EXECUTE,根据这些属性可以做一个判断。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文