SIGILL 의 code 값에 대해서..
훔.. 질문이 너무 복잡했나..
이거라도 알고 싶네요.
sigill 의 종류를 아는 방법이 siginfo_t -> code 를 보는것은 맞는지요?
-----------------------------------------------------------
안녕하세요.
SIGILL 은 다음과 같이 구성되어 있고
siginfo_t->code 에서 이를 구분할 수 있는것으로 알고 있습니다.
< SIGILL > code==1 : ILL_ILLOPC illegal opcode code==2 : ILL_ILLOPN illegal operand code==3 : ILL_ILLADR illegal addressing mode code==4 : ILL_ILLTRP illegal trap code==5 : ILL_PRVOPC privileged opcode code==6 : ILL_PRVREG privileged register code==7 : ILL_COPROC coprocessor error code==8 : ILL_BADSTK internal stack error 헌데 SIGILL 발생시 kernel 의 signal handler 에서 siginfo_t 를 보면 다음과 같네요.
SIGILL si no(4), errno(0) code(196609)
si_code 196609 은 멀까요.. ;;;
----------------------------------------------------------------------------------
사실 문제 자체도 좀 황당한 문제라 문제 공유를 함 해봅니다.
free memory 가 부족할때 간헐적으로 SIGILL 을 받고 죽은 문제입니다.
이 문제는 SIGILL 이 랜덤한 pc 값에서 발생하고
신기한게 실제 arm instruction 이 깨지지 않았음에도 SIGILL 이 발생하였습니다.
SIGILL 을 받았을 경우 signal handler 에서 pc 값 주변의 instruction 들을 읽어서 출력하도록 구현한후
재현을 하였는데 출력된 instruction 들이 binary 에서 offset 비교해본결과 동일하네요.
data instruction 이 깨지지 않았아도 SIGILL 이 발생할 수 있을까요
댓글 달기