선수 지식이 어떤게 필요한가요
기본적으 C언어와 언셈블리어 그리고 커널에 대한 기본 소양이 있어야 분석이 가능한지요?
구글이나 여러 검색사이트에서 커널패닉 덤프분석한 사례를 보면
진짜 무슨 말인이 알아 볼수가 없습니다
그렇다고 교육해주는 것도 없구요
그래서 스스로 공부를 해보려고 하는데
최소 덤프분석 사례를 이해할 정도까지는 만들고 싶습니다
어떤 공부를 해야하는지요?
댓글 4
-
Ted
2013.07.31 11:22
-
아척
2013.08.01 17:07
장문의 답변 감사드립니다...덤프분석이 가능한 서버 엔지니어는 정말 수준이 높으신 분들이군요
조언대로 욕심부리지 않고 차근차근 언어 공부부터 해야할거같습니다
다시한번 성의 있는 답변 감사드립니다
-
Ted
2013.08.01 12:05
제가 말씀드린 부분은 clue를 찾기 위한 방법입니다.
실질적으로 커널 패닉을 분석하기 위해서 필요한 것은
- 커널 패닉이 발생한 부분에 대한 이해 및 분석
- 덤프에서 clue를 찾기위한 방법, 램 및 register를 뒤져서 실행상태에서 어떤 일이 일어났는지에 대한 clue를 분석 수집하고
이를 위해 코드와 연계해서 분석하는 것입니다.
당연히 패닉이 발생한 부분의 코드에 대한 이해는 필수이고,
덤프에서 왜 발생했는지를 알아내기 위한 clue를 찾기 위해, 예를 들자면, arm 의 경우 arm 칩의 register들과 쓰임새에 대해
알고 있어야 하는 것이죠, 이를 바탕으로 문제 당시에 함수들이 어떤 context로 실행되었는지를 확인하고
이를 분석하는 것입니다.
당연히 C에 대해서는 알고 계셔야 하구요, assembly 언어도 알아야 합니다. 정확하게는 문제가 생긴 부분의 c code에 해당하는 assembly code로 어떤 부분인지 확인하고 어떤식으로 실행되고 있는지를 알아야 실제 문제가 난 부분에 대한 자세한 분석이 됩니다.
디버깅이라는 것은 전체적으로 모든 부분을 어느정도 다 알고 계셔야 합니다.
해당 패닉 발생한 부분의 소스에 대한 이해가 있어야 하고,
C는 기본이고, target이 ARM이라면 ARM의 동작방식도 알아야 하고, OS가 어떤식으로 동작하는지도 어느정도 알아야 하고
컴파일러에 의해서 어떤 식으로 C code가 컴파일되어지는 지도 알아야 하고, 실질적으로 문제가 난 부분은 c code상으로는 잘 보이지 않을 수 있기 때문에 assembly 언어에 대한 이해도 필요합니다.(짤 수준은 안되도 짜여진 코드를 이해는 할 수 있어야 합니다.)
쉬운 문제들은 패닉 덤프의 커널 로그만으로도 분석이 가능한 경우도 있지만, 이 경우에는 가장 쉬운 경우이기 때문에.
코드의 논리를 파악해서 분석이 가능한 경우입니다.
위에 링크를 걸어드린 것은 코드 논리로만으로 clue를 찾을 수 없을 경우 실행 context에서의 변수 값 이나 실행 과정등을 면밀히 분석하기 위한 기반 지식들입니다.
이 부분조차도 이해가 안되신다면 우선 C 언어 공부와 더불어 컴파일 된 assembly code를 공부해보시는 것을 추천드립니다.C code 가 어떤 내용의 assembly code로 되어있는지를 공부하시면 위 링크를 공부하시는데 도움이라 되시리라 봅니다.
-
아척
2013.07.31 14:35
답변 감사드립니다 제가 하는일은 unix엔지니어구요 이제 리눅스로 많이 다운사이징이 되서
리눅스를 공부하려고하는 se입니다 하지만
프로그래밍 언어쪽에는 학부때 배운 이후로 없어서요
위에 링크 걸어주신것도 내용을 이해하기 힘드네요
우선 위 내용을 이해하려면 C언어나 어셈블리어를 알아야 알아볼수있을까요??
.
스스로 공부하기엔 무리가 좀 있죠...
ARM의 경우를 기준으로 말씀드리자면 (다른 칩도 비슷합니다.)
기본적으로 ARM register들에 대한 기본 지식이 있어야 합니다.
각 register는 특별한 목적을 가진 것도 있고 범용인 것도 있습니다.
이중 PC, LR, SP register는 필수적으로 아셔야 합니다.
추가로 pipeline에 대해서도 알고 계셔야 합니다.
그 다음 함수가 불릴때 저 register들이 어떻게 쓰이는지를 알아야 합니다.
가장 필수적인 사항중 하나가, 왜 LR register의 값을 stack에 넣느냐 입니다.
이 부분은 function call 되는 과정을 이해하는 데 있어 필수입니다.
임베디드 레시피 사이트에 있는 자료를 한번 읽어보세요...
하기 귀찮은 자료 정리를 해놨네요..