context_save_struct에 있는 레지스터 저장값들은 항상 커널 스택의 정보인지?
글쓴이: zzang9sds / 작성시간: 월, 2007/02/26 - 2:52오전
우선 제가 하고자하는 작업은 현재 실행중인 프로세스의 프로그램 카운터(PC)의 레지스터 값을 뽑아내어 그 프로세스의 어느 함수가 동작중인지를 알아내고자 합니다.
일단 kernel/timer.c에 있는 do_timer() 함수내에서
current 매크로를 이용하여
current->comm //프로세스명 추출
current->thread.save->pc //context_save_struct에 있는 pc값 추출
이렇게 해서 실제 값을 뽑아보니 프로세스명을 맞게 나오는데
pc값은 0xC000000 이상의 값이 나오고 있습니다.
프로세서의 메모리 공간에서 0xC0000000~0xFFFFFFFF까지는 커널 공간으로 알고있습니다.
또 active_mm->mmap을 통해서 vm_area(4G의 프로세스 메모리 공간에서 이 프로세스가 차지하고 있는 메모리 주소)를 다 추출하면 0xC000000 이하의 현재 프로세스의 메모리공간이 맞게 나오고 있습니다.
프로세스의 코드부분도 분명히 이 공간내에 위치해 있을꺼라 생각하는데 그 프로세스가 다음에 실행 할 코드, 즉 pc값이 가르키고 있는 주소는 왜 항상 0xC000000인지를 모르겠습니다.
혹은 이 방법 외에 현제 프로세스의 프로그램 카운터 값을 뽑아 낼 방법이 없는지요?
Forums:
댓글 달기