首页
社区
课程
招聘
[求助]linux内核下关于*(int *)address的错误处理
发表于: 2013-4-16 16:32 4557

[求助]linux内核下关于*(int *)address的错误处理

2013-4-16 16:32
4557
小弟接触linux 内核开发不久。遇到一问题。
在linux内核下,我写一内核模块。要扫描0xe0100000~0xe0ffffff下的内存。
int address = 0xe0100000;
while(address < 0xe0ffffff)
{
    printk("%X\n", *(int *)address);
    address +=4;
}
当address的内存地址无效时,该如何进行错误处理?以保证全部扫完。

c++的try.......except,catch,finally可以处理。不过是这里用C语言。
另外,如果c++可以编译linux内核模块。能不能告诉我makefile如何写。
小弟先谢谢各位看官了。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (3)
雪    币: 41
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶一下。没人知道吗。
2013-4-17 08:53
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
3
是不是需要自己处理 SIGSEGV
我帮你google了下

http://stackoverflow.com/questions/2663456/write-a-signal-handler-to-catch-sigsegv

http://cs-pub.bu.edu/fac/richwest/cs591_w1/notes/wk3_pt2.PDF
2013-4-17 11:01
0
雪    币: 41
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢,应用层是可以这样处理。内核层好像没有signal(.....)
能不能把下面的改写成内核层的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <setjmp.h>
 
typedef int BOOL;
typedef unsigned int    UINT;
typedef unsigned char   BYTE;
#define TRUE    1
#define FALSE   0
 
static BOOL g_bPtrTestInstalled;
static jmp_buf g_PtrTestJmpBuf;
 
void PtrTestHandler(int nSig)
{
    if (g_bPtrTestInstalled)
        longjmp(g_PtrTestJmpBuf, 1);
}
 
BOOL __IsBadReadPtr(void* lp, UINT cb)
{
    UINT i;
    BYTE b1;
    BOOL bRet = TRUE;
    void (* pfnPrevHandler)(int);
    g_bPtrTestInstalled = TRUE;
    if (setjmp(g_PtrTestJmpBuf))
    {
    bRet = FALSE;
        goto Ret;
    }
    pfnPrevHandler = signal(SIGSEGV, PtrTestHandler);
 
    for (i = 0; i < cb; i ++)
        b1 = ((BYTE*)lp)[i];
    Ret:
    g_bPtrTestInstalled = FALSE;
    signal(SIGSEGV, pfnPrevHandler);
 
    return bRet;
}
 
int main()
{
    int  ptr = 0x8048000;
    if(__IsBadReadPtr((int *)ptr, 4))
        printf("mem value:%X\n", *(int *)ptr);
    else
        printf("failed:0x%X\n",ptr);
    return 0;
}
2013-4-17 12:32
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册