본문 바로가기

Subject/Reversing

SEH - 예외 종류

 0. 디버깅 중 자주 접하는 예외 목록.


  -EXCEPTION_ACCESS_VIOLATION(0xC0000005)   

  :존재하지 않거나 접근 권한이 없는 메모리 영억에 대해서 접근.

 

     ex) MOV DWORD PTR DS:[0], 1

        > 메모리 주소 0은 할당된 영역이 아님.

          ADD DWORD DS:[401000], 1

        > .text 섹션의 시작주소 [401000]은 write 불가능(read 속성만 가짐)

          XOR DWORD PTR DS:[80000000], 1234  

        > Kernel 영역인 [80000000]는 user모드에서 접근 불가능.


  -EXCEPTION_BREAKPOINT(0x80000003)

  :CPU가 BP 명령어(INT3:0xCC)를 실행할 때 발생되는 예외.

     > 디버거는 이 예외를 이용하여 BP 기능을 제공.

       

     /* 일반 실행으로 BP 명령어를 만날 경우,

      위 예외가 발생한 뒤 OS의 기본 예외처리기에 의해 프로세스가 종료됨.

        > 시스템 레지스트리에 기본 디버거를 설정했다면,

          해당 디버거에 위 예외가 발생한 프로세스를 Attach 시켜줌. */

         

  -EXCEPTION_ILLEGAL_INSTRUCTION(0xC000001D)

  :CPU가 해석할 수 없는 Instruction을 만날 때 발생.

 

  -EXCEPTION_INT_DIVIDE_BY_ZERO(0xC0000094)

  :INTEGER(정수) 나눗셈 연산에서, 0으로 나누는 경우 발생.


  -EXCEPTION_SINGLE_STEP(0x80000004)

  :CPU가 싱글스텝 모드로 전환되면, 명령어를 하나 실행할 때마다 위 예외 발생 후 멈춤.

    > 변경하려면 EFLAGS 레지스터의 TF 비트를 1로 셋팅.

 

     

'Subject > Reversing' 카테고리의 다른 글

세그먼트 레지스터, 플레그 레지스터  (0) 2016.10.18
SEH - 예외처리기  (0) 2016.10.13
PEB  (0) 2016.10.11
QR Code  (0) 2016.08.20
TEB 구조체  (0) 2016.08.07