Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177085
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 09:10
文章分类
文章存档

2016年(43)

我的朋友

分类: 嵌入式

2016-08-23 08:53:14


点击(此处)折叠或打开

  1. /*获取进程栈起始地址的方法*/
  2. unsigned char GetStack(unsigned long int *pdwStackBase,unsigned long int *pdwStackBottom)
  3. {
  4.     unsigned int dwCurProcessId;
  5.     FILE *fp = NULL;
  6.     CHAR acLine[256] = {0};
  7.     unsigned long int start=0;
  8.     unsigned long int end = 0;
  9.     CHAR ucFileName[160]={'\0'};

  10.     /*获取进程id*/
  11.     dwCurProcessId = getpid();

  12.     snprintf(ucFileName,sizeof(ucFileName),"/proc/%u/maps",dwCurProcessId);

  13.     /* 打开文件流,且fd不被子进程继承,目前仅对定义了O_CLOEXEC的LIB库有效*/
  14.    
  15.     fp = fopen(ucFileName,"r");
  16.     if (fp == NULL)
  17.     {
  18.         printf("fopen %s failed! errno:%d\n",ucFileName,errnoGet());
  19.         return FALSE;
  20.     }

  21.     
  22.     while (0 == feof(fp))
  23.     {
  24.         memset(acLine,'\0',sizeof(acLine));
  25.         if (NULL == fgets(acLine, 256, fp))
  26.         {
  27.             break;
  28.         }

  29.         if (strstr(acLine,"stack") != NULL)
  30.         {
  31.             sscanf(acLine,"%lx-%lx",&start,&end);
  32.             break;
  33.         }
  34.     }
  35.     fclose(fp);
  36.     *pdwStackBase = start;
  37.     *pdwStackBottom = end;
  38.     return TRUE;
  39. }

阅读(1877) | 评论(0) | 转发(0) |
0

上一篇:函数钩子例程

下一篇:虚拟终端例程

给主人留下些什么吧!~~