전체 프로세스 백트레이스 하는 방법이 있을까요?>.<
글쓴이: sixwox88 / 작성시간: 수, 2012/01/18 - 10:08오전
안녕하세요~ :)
현재 arm 보드에서 2.6.35.3 커널 버전을 사용해 개발하고 있습니다~
커널 모듈에서 현재 올라와있는 전체 프로세스의 콜 스택 값을 알아올 수 있는 방법이 있을까요?
현재 run하고 있는 프로세스의 콜 스택은 __bulitin_frame_address를 호출하여 fp 레지스터 값을 얻어와 호출 체인을 따라가는 방법으로 알 수 있었습니다.
다른 프로세스들의 콜 스택은 thread_saved_fp( linux/arch/arm/include/asm/thread_info.h ) 함수를 이용해서 가져오고 있긴 한데,
여기서 fp 레지스터 값을 가져와서 분석해 보니, 콜 스택 값이 제대로 나오지 않았습니다.
생각해보니, 다른 프로세스의 fp 에서 메모리 주소를 가져와도 해당 주소로 접근하면 현재 프로세스의 메모리로 접근하기 때문에
잘못된 값이 나오는 것이 아닐까 하는 생각이 들었습니다.
현재 실행되고 있는 프로세스외에 다른 프로세스를 백트레이스 하려면 메모리를 스위칭 하는 과정이 필요할까요?
혹시 프로세스 구조체나 pid만 넘기면 해당 프로세스의 콜 스택 값을 찍어주는 API 같은 것이 있을까요? (wince에서는 이런게 있던 걸로 알고 있는데..>.<)
Forums:
댓글 달기