免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1638 | 回复: 1
打印 上一主题 下一主题

[Linux] linux有没有测试内存可读写的函数。 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之辽宁
日期:2016-07-06 16:53:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-09 19:28 |只看该作者 |倒序浏览
WINDOWS上有IsBadReadPtr和IsBadWritePtr函数测试内存的可读可写?LINUX有类式的函数吗?

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
2 [报告]
发表于 2013-09-09 22:17 |只看该作者
本帖最后由 myworkstation 于 2013-09-09 22:18 编辑

回复 1# daxiguagg


    没有,linux下要自己实现相应的函数,通常都是处理SIGSEGV信号来实现。examples:

  1. #include <setjmp.h>
  2. #include <signal.h>

  3. static jmp_buf hndbuf;

  4. static void handler(int ignored)
  5. {
  6. (void)ignored;
  7. longjmp(hndbuf, 1);
  8. }

  9. static BOOL IsBadWritePtr(const void *lp, size_t ucb)
  10. {
  11. struct sigaction act;
  12. struct sigaction oact;
  13. char *base = (void*)lp;
  14. char *over = base + ucb;
  15. volatile char *test;

  16. act.sa_handler = handler;
  17. sigemptyset(&act.sa_mask);
  18. act.sa_flags |= SA_RESTART;

  19. if (sigaction(SIGSEGV, &act, &oact) < 0) {
  20. return FALSE; /* Debatable action */
  21. }

  22. switch (setjmp(hndbuf)) {
  23. case 0:
  24. for (test = base; test < over; test++) {
  25. *test = *test;
  26. }

  27. (void)sigaction(SIGSEGV, &oact, NULL);
  28. return FALSE;
  29. default:
  30. break;
  31. }

  32. (void)sigaction(SIGSEGV, &oact, NULL);
  33. return TRUE;
  34. }
复制代码
可以参考文章 :
http://www.360doc.com/content/12/0717/16/9484405_224759271.shtml
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP