2011-12-13 3 views
1

는이 같은 신호 처리기를 추가 한설정 세그먼트 오류 핸들러

if (ka->sa.sa_handler == SIG_WPG) { 
     unsigned long ul_cr2 = current->tss.cr2; 
     unsigned long ul_eip = (unsigned long) regs->eip 
     int ul_cr2_rounded = ul_cr2 & PAGE_MASK; 
     printk("ul_eip: %d\n", ul_eip); 
     printk("ul_cr2: %d\n", ul_cr2); 
     printk("ul_cr2_rounded: %d\n", ul_cr2_rounded); 
    } 

을 어떻게 할 수 이 신호 처리기가 사용자 영역에서 세그멘테이션 오류를 처리하도록 만드시겠습니까?

static struct sigaction segv_action 

다음 설정 :

segv_action.sa_handler = SIG_WPG; 

이것

//callback prototype 
void Handler(int sig); 

//register the callback for the specific signal 
signal(SIGSEGV,&Handler); 

답변

4

는 해당 예외 콜백을 등록 signal() 방법을 사용하여 대학 프로젝트를위한 것이 었습니다. 이러한 변화는 학교에서 얻은 .c 파일에서 이루어 졌으므로 내가 알지 못하는 다른 세부 사항이 필요할 수도 있습니다.

+0

예를 들려 줄 수 있습니까? 나는 신호 (SIG_WPG)로 시도했다; 어떤 캐스팅없이 포인터에서 정수 만들기에 대한 오류가 발생합니다. – JacobOJ

+0

@JacobOJ 내가 제안한 것을 시도 했습니까? Btw, signal은 응용 프로그램에 신호를 보내지 않도록 콜백을 등록하는 데 사용됩니다. –

+0

사용법을 잘 모르겠습니다. 핸들러는 SIG_WPG를 어떻게 사용하는지 알고 있습니까? – JacobOJ