crash 가 발생 하였을때 pc(program counter) 레지스터 값에 대
안녕하세요.
crash 발생시 signal 처리루틴에서 스택에 저장되어 있는 함수들을 꺼집어 내는 작업을 하고 있는데 몇가지 궁금 한 점이 있어서요...
1. application crash 시 PC(program counter) 값은 스택영역이나 코드 영역을 지시 해야만 하나요?
2. 스택영역을 알고 있다면 스택에서 함수들을 꺼내는 방법은?
3. 위의 것에 대한 참고 자료나 서적있으면 좀 추천해주세요.
SN_ASSERT_SHOW_FILE: succesfully crashed file opened !!
Registers:
zr at v0 v1 a0 a1 a2 a3
00000000 8012c540 00000000 ffffffff 000001c1 00000006 2accde40 00000000
t0 t1 t2 t3 t4 t5 t6 t7
00001f00 00001f00 00000000 8ee8acc0 8ee85cc4 8ee85cc8 8ee85cc0 00000004
s0 s1 s2 s3 s4 s5 s6 s7
00000006 00405484 00405488 1000042c 00000001 00000001 ffffffff 00000000
t8 t9 k0 k1 gp sp s8 ra
00000000 2ab35c40 00000000 00000000 2acd79d0 7fff7840 00000000 2ab35970
Stack: 1072 bytes dumped starting from 0x7fff74d8
READSTACK : getting first line from /proc/self/maps buf : 00400000-00408000 r-xp 00000000 00:07 1842325 /root/crash/obj/crash
READSTACK : Register information SP 7fff7840 PC 2ab35c54 RA 2ab35970
READSTACK : PC 2ab35c54 CODE_START 400000 CODE_END 408000 STACK_INBOUND(pc) 0
1. PC는 항상 코드 영역에 있어야 합니다. 2. callsta
1. PC는 항상 코드 영역에 있어야 합니다.
2. callstack을 말하는 것인가요? 일반적으로 함수가 불릴 때마다 stack frame이 만들어지고, 이를 가리키는 frame pointer register가 있습니다. 이를 이용하면 현재 stack frame을 알 수 있고, 여기에 저장된 값을 바탕으로 이전 stack frame을 찾아갈 수 있습니다. 구조는 아키텍처마다 다릅니다.
3. stack frame으로 찾아보세요.
댓글 달기