가 어뜨케 되는지 아시는분..^^;...아니면 참고 문서라도 아시는분은
가르켜주시면 감사하겠습니다.
저는 ptrace콜을 이용하는걸로 추측됩니다만..
예전에 커널정독스터디 시간에 잠깐 얘기가 나왔는데 까먹었네요..이궁..(태훈님하구 창우님이 말씀해주셨는데 건망증이 있어서..)
가르켜주시면 감사하겠습니다.
저는 ptrace콜을 이용하는걸로 추측됩니다만..
예전에 커널정독스터디 시간에 잠깐 얘기가 나왔는데 까먹었네요..이궁..(태훈님하구 창우님이 말씀해주셨는데 건망증이 있어서..)
댓글 6
-
백창우
2008.01.31 15:46
-
박은병
2008.02.01 04:20
음..그렇군요....^^ㅋ
근데 정말 기초적인것이 궁금한데요..실제로 gdb가 이렇게 break point를 거는 것이겠지요(ptrace콜하고 gdb하고는 관련이 없게 되는건지..)??
그러면 instruction을 바꾸는 것이 될텐데요(일종의 binary translation이라고 생각하면 될까요??)..어떤 실행파일이든지 그것이 메모리 영역에 올라가면 코드부분은 read only가 되지 않나요??그럼 수정하게 된다면 예외가 발생할꺼 같은데요..음..제가 잘 모르고 있는건가요??
아니면 다르게 생각한다면 미리 실행파일을 스캔해서 break point되는 부분을 적절히 수정후에 메모리에 올리게 되는걸까요??
-
맥주
2008.02.01 10:14
gdb 가 어떤씩으로 동작하는지는 잘 모릅니다만, 메모리에 올라간 코드에 브레이크 포인터가 설정되면, 해당 명령을 바꾸고, 원 코드를 간직하고 있어야 겠지요. 브레이크 포인터는 하드웨어/소프트웨어 로 나눕니다. 암에서 코어 내부 EmbeddedICE 가 있는데요. arm9 은 두개의 하드웨어 브레이크 포인터를 설정할 수 있습니다. EmbeddedICE에 두개뿐이 설정을 못해서 그렇습니다. 하드웨어 브레이크 포인터가 되는 조건은 특정 address, data, condition 이 될 수 있습니다. 소프트웨어 브레이크 포인터는 디버깅 툴이 사용하는데요. TRACE32 같은 경우엔 하드웨어 브레이크 포인터를 하나 사용해서 address=0xbebebebe 인가로 설정해 두고, 브레이크 포인터가 필요한 코드에 저 0xbebebebe 로 바꿉니다. 원래 코드는 간직하구요.. 하드웨어 브레이크 포인트의 장점은 address가 특정 device 가 될수 있고, 읽거나 쓰는 동작에 대한 조건이 가능합니다. 소프트웨어는 코드를 변경해서 사용하는 것이기 때문에 address 조건만 가능하지요.
저도 잘 모르는데, 두서 없이 --; 저희 암팀 커널 끝나고, 디버그 분석 할까요? ㅋㅋㅋ -
백창우
2008.02.01 11:08
덧붙여서 여기서 드러나는 하드웨어 브레이크 포인터 방식과 소프트웨어 브레이크 포인터 방식의 장단점은
하드웨어 브레이크 포인터의 장점은 이백님께서 잘 말씀해주신것 같고, 단점은 브레이크 포인터를 걸수 있는 횟수가 하드웨어 브레이크 포인터 갯수 만큼 제한된다는 것입니다.
소프트웨어 브레이크 포인터는 갯수 제한이 없죠.
gdb에서 ptrace system call을 사용해서 디버깅 하는것은 사실입니다.
ptrace system call을 사용하여 브레이크 포인터를 설정하고, 브레이크 포인터에 의해 trap이 발생했을때 해당 프로세스의 parent(여기서는 gdb)로 제어권이 넘어가게 됩니다.
instruction을 변경할때는 gdb가 직접 그일을 하지 않고 ptrace system call을 사용해서 kernel이 해준다고 하면 이해가 쉽겠네요.
그래서 메모리 상의 code 영역을 바로 변경할수 있는 것입니다. -
백창우
2008.02.01 23:57
저는 저희 스터디의 이런점이 참 마음에 듭니다. :)
-
박은병
2008.02.02 12:13
와우........^^V.....I got it..!!
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 프로그래밍 관련 Q&A 게시판 입니다. | woos | 2016.04.09 | 22250 |
» | 디버거 원리.. [6] | 박은병 | 2008.01.31 | 13441 |
17 | PS/2 mouse port control | 백창우 | 2008.01.17 | 7196 |
16 | VMM 세미나중 디바이스 가상화 관련 질문^^.. [3] | 박은병 | 2008.01.04 | 7252 |
15 | 질문..음.. [2] | 박은병 | 2007.12.14 | 6453 |
14 | arm 보드 구매에 대한 조언 부탁 드립니다. [1] | 김성준 | 2007.10.27 | 8581 |
13 | Linux kernel source 분석 study에 대하여 질문이 있습니다. [1] | 온정상 | 2007.10.19 | 8712 |
12 | 모집 공고 보고 참석 메일 보냈는데요. [1] | 문경원 | 2007.10.17 | 8273 |
11 | 스터디 참여에 관해서 질문이있습니다. [1] | 최대진 | 2007.09.12 | 8530 |
10 | s3c2440기반의 리눅스 커널 분석 중 MM관련 질문입니다. | 유태경 | 2007.09.02 | 21523 |
9 | 커널 스터디는 어떻게 참여해야하느건가요? [1] | 김태진 | 2007.08.10 | 8806 |
8 | 커널 스터디에 관해서;;. 질문드립니다. [5] | 한상은 | 2007.07.11 | 8693 |
7 | 다음 커널분석 스터디에 참가하고 싶습니다. [1] | 김기태 | 2007.07.04 | 8820 |
6 | 아키텍쳐 바이블 책 문의입니다. [2] | 이경호 | 2007.03.18 | 11958 |
5 | i386의 i 와 386은 각각 어떤 의미인가요? [4] | 이경호 | 2007.03.07 | 13685 |
4 | ppc에서 preempt 완벽 지원여부 아시는분? [1] | 최종환 | 2007.02.22 | 16131 |
3 | 알아볼 내용. [6] | 원민수 | 2006.11.12 | 9892 |
2 | u-boot 소스 분석에서 궁금한 점이 있습니다. [6] | 원민수 | 2006.06.28 | 15196 |
1 | 홈페이지 어떻습니까? [8] | 백창우 | 2006.06.05 | 9722 |
.
원하시는게 debugger에서 정확하게 어떤 부분을 말씀하시는지 확실치 않아 브레이크 포인터에 대해서만 설명합니다.
x86에서 어떤 instruction으로 바꾸는지는 저보다 태훈님께서 더 자세히 아실듯...
linux에서 debugging 관련 정보를 검색하시려면 DWARF로 검색해보시기 바랍니다.