WinCE 下进程可访问的代码页的地址获取


此功能是在看 TCPMP 代码时发现的,感觉以后的工作中可能用到此部分功能,所以记录下来。

 1 #include "windef.h"  
 2 #include "windows.h"  
 3 /* 
 4  * 功能: 进程可访问的代码页 
 5  * 参数:  pPtr(in) 进程中一函数的指针 
 6             ppucMin,ppucMax(out) 输出进程可访问地址的最小/最大值 
 7             puiPageSize(in/out) 页面大小设置与输出 
 8 */  
 9 void CodeAddrFindPages(void *pPtr,unsigned char **ppucMin,unsigned char **ppucMax,unsigned int *puiPageSize)  
10 {  
11     unsigned char *pucMin = NULL;  
12     unsigned char *pucMax = NULL;  
13     unsigned int uiPageSize =   
14     #if defined(MIPS)  
15         1024;  
16     #else  
17         4096;  
18     #endif  
19     if(puiPageSize)  
20         *puiPageSize = uiPageSize;  
21   
22     pucMin = pucMax = (unsigned char *)((unsigned int)pPtr & (~(uiPageSize - 1)));      // ~ 的优先级高于位操作符 &  
23     // Leo: IsBadCodePtr - Determines whether the calling process has read access to the memory at the specified address.  
24     while(!IsBadCodePtr((FARPROC)(pucMin - uiPageSize)))  
25         pucMin -= uiPageSize;  
26     while(!IsBadCodePtr((FARPROC)pucMax))  
27         pucMax += uiPageSize;  
28   
29     *ppucMin = pucMin;  
30     *ppucMax = pucMax;  
31 #ifdef _USE_WINDOWS_CE_PLATFORM  
32     RETAILMSG(1,(L"[CodeAddr]min = 0x%X; max = 0x%X\r\n",pucMin,pucMax));  
33 #else  
34     printf("[CodeAddr]min = 0x%X; max = 0x%X\r\n",pucMin,pucMax);  
35 #endif  
36 }  

运行结果:

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn