【发布时间】:2014-01-22 16:13:54
【问题描述】:
我的意思是地址本身的数值,而不是它指向的值。 比如一个地址是0x0,我们肯定知道它是非法的,但是如果是0xffffeeee234560,我怎么判断它是正常的还是异常的呢? 另外,如何知道这个地址是属于文本段,还是数据段,还是堆,还是栈段?
我用过pmap,cat /proc/id/smaps看看有没有明确的规则,但无法得到合理的方法,只知道堆地址大于文本段,栈地址大于堆。
【问题讨论】:
-
出于好奇,你为什么想知道这个?
-
你无法分辨,除非使用强烈的平台特定知识,并且在内核的最低级别之外可能无法获得这些信息。
-
根据您的应用程序,您可能会发现这种在 Windows 中识别非法指针的体验很有趣:blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx
-
你为什么问?是出于调试目的,还是因为您想在自己的内存分配器中耍花招?
-
请解释您的总体担忧和您的问题的动机(是调试您的程序还是实现您的内存分配器);我们以不同的方式猜测您问题的动机及其背景。请编辑您的问题以改进它。