GDB와 Segmentation fault 질문
글쓴이: ghostyak / 작성시간: 금, 2012/06/08 - 4:13오후
gdb를 사용해서 디버깅 중입니다.
레지스터 상태가 아래와 같다고 할 때,
PC가 가리키는 ldr r2, [lr, r3, lsl #2] 명령은 Segmentation Fault를 일으킬 수 있나요?
어셈은 생소해서... 도움 부탁 드립니다.
(gdb) info registers r0 0x48846fd4 1216638932 r1 0xfffffc01 4294966273 r2 0x0 0 r3 0xa0000000 2684354560 r4 0xfffffffb 4294967291 r5 0x20d75 134517 r6 0x0 0 r7 0x0 0 r8 0xe0000000 3758096384 r9 0xa0000000 2684354560 r10 0x48846f90 1216638864 r11 0x25 37 r12 0x41206000 1092640768 sp 0x464b1758 0x464b1758 lr 0x48810b00 1216416512 pc 0x40196e6c 0x40196e6c <cvHaarDetectObjects+2644> fps 0x0 0 cpsr 0x20000010 536870928
아래는 PC가 가리키는 곳을 disassemble 한 것입니다.
(gdb)disassemble 0x40196e6c 0x40196e64 <cvHaarDetectObjects+2636>: add r3, r0, r9 0x40196e68 <cvHaarDetectObjects+2640>: ldr r0, [sp, #104] 0x40196e6c <cvHaarDetectObjects+2644>: ldr r2, [lr, r3, lsl #2] 0x40196e70 <cvHaarDetectObjects+2648>: ldr lr, [sp, #120] 0x40196e74 <cvHaarDetectObjects+2652>: ldr r12, [r0, r3, lsl #2]
Forums:
PC값의 메모리 위치를 읽어서
PC값의 메모리 위치를 읽어서 실행하려고하겠지요.
그런데 PC값에 해당하는 메모리 위치가 예를 들어 커널 영역이라 읽을 수 없을 때도 있습니다.
또 PC의 값이 괸찬다하더라도 r3를 보시면 0xa000~~~ 인데 이 영역이 사용자 프로세스가 읽을 수 있는 영역인지를 확인해보세요.
댓글 달기