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


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

c gdb

逆袭的天行者 12 years, 8 months ago

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

asakura answered 12 years, 8 months ago

Your Answer