如何测试linux用户空间应用程序中的地址是否可读

gim*_*ilk 20 linux memory segmentation-fault memory-address

出于调试目的,我需要测试指针以查看它是否指向有效的可读页面.目前我正在解析/ proc/[pid]/maps以查看地址是否映射好,但这看起来有点啰嗦.有没有更好的办法?谢谢.

caf*_*caf 20

规范的方法是使用write()系统调用从页面读取(写入虚拟pipe()文件描述符).相反断层的,它会返回-1errno == EFAULT如果传递的缓冲区write()是不可读的.

  • 警告:至少有一个其他SO解决方案建议使用/ dev/null用于此目的(http://stackoverflow.com/questions/4611776/isbadreadptr-analogue-on-unix),但是更新的内核(我在3.8上测试过. 7)即使'buf'为NULL,也为/ dev/null write()返回成功.因此,虽然这个测试可能适用于您正在测试的系统上的/ dev/null,但它绝对不是一个可移植的解决方案.使用其他一些fd(如虚拟管道或posix shm对象)不会那么快,但肯定会更安全,更便携. (5认同)