본문 바로가기
Security/Reversing

※디버그레지스터란?

by Winduck 2018. 3. 7.
반응형

Debug Register

하드웨어 breakpoint를 가능하게 하는 레지스터

[그림 : http://hackability.kr/entry/익스플로잇-개발-12-EMET-52]

DR0~3 : 하드웨어 브레이크포인터의 주소. 해당주소 접근/쓰기/실행 시 INT1발생

DR6(Debug Status Register)

INT1이 발생한 이유를 알려주는 레지스터. 프로세스에 의해 세트되고 사용자가 직접 지워줘야함

- B0~3(Bit0~Bit3) : 어떤 레지스터에 의해 엑세스되어졌는지 나타냄.

- BD(Break for Debug register access,Bit13) : DR7GD비트에 의해 디버그레지스터가 잠겨있을 때 디버그 레지스터를 엑세스하면 INT11로 세트되어짐

- BS(Break for Single-step,Bit 14) : EFLAGS레지스터의 TF비트가 세트되어 INT1이 발생

- BT(Break for Task switch,Bit 15) : Task변환시 트레이싱을 가능하게 하는 TSST비트가 셋트되어 INT1이 발생

DR7(Debug Control Register)

4개의 하드웨어브레이크포인터 발동조건을 지정

- L1~3(Local enable, Bit0) : 세트되었을 때에 현재의 태스크 기간동안만 하드웨어 브레이크 포인트(DR0~3)가 작동. 다음 태스크변환때 비트는 자동으로 0

- G0~3(Global Enble,Bit1) : DR0~3에 저장되어있는 주소에 대해 모든 시간동안 bp가 동작.

- LE(Local Exact, Bit8),GE(Global Exact,Bit9) : 비트가 0 일경우 브레이크포인트에 접근시 바로 인터럽트가 걸리지 않고 몇 개의 명령이 실행된이후 인터럽트가 발생. (LE는 하나의 태스크기간 GE는 모든 기간)


- GD(Global Debug Access , Bit13) : 하드웨어 브레이크포인트와 연과없이 디버그 레지스터에 대한 엑세스가 이루어지면 인터럽트가 발생한다. 이후 자동으로 0

- RW0~3(Read/Write access, Bit 16~17) : 말그대로 하드웨어브레이크포인터에 걸린 주소에 접근/쓰기/읽기할 때 발동시킬지 설정하는 비트

RW

설명

00

명령어 실행시

01

쓰기

10

CR4레지스터에 있는 DE플래그가 1일경우,I/0포트에 대한 읽기 쓰기작업시

11

모든엑세스시 브레이크포인트

 

- LEN 0 ~3(break-point Length,bit18-19) : 하드웨어 프레이크 포인트주소의 범위, 명령실행시에는 00으로 셋팅, 데이트 엑세스시 다음의 표와 같다.

LEN

BP유효범위 길이

BP시작번지

00

1byte

임의

01

2byte

짝수번지

10

3byte

-

11

4byte

4 배수

 

 



반응형

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

[Anti-VM] - 어셈블리 STR편  (0) 2018.01.14
PEB구조체 LDR을 이용한 Kernel32.dll주소 찾기.  (0) 2017.12.07
Zw API와 Nt API의 차이  (0) 2017.05.11
[AntiVM 탐지 우회]  (0) 2017.03.27
※함수호출규약  (0) 2017.03.15

댓글