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

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

2013-4-16 16:32
4351
小弟接触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如何写。
小弟先谢谢各位看官了。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (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(.....)
能不能把下面的改写成内核层的。
#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
游客
登录 | 注册 方可回帖
返回
//