x86 디버깅레지스터

x86 debug register

x86 아키텍처에서 디버깅 레지스터는 프로세서가 프로그램 디버깅을 위해 사용하는 레지스터입니다.DR0이라는 이름의 6개의 디버깅 레지스터가 있습니다.DR7, DR4 및 DR5는 DR6 및 DR7의 오래된 동의어입니다.디버깅 레지스터를 사용하면 프로그래머는 4개의 디버깅주소 세트와 관련된 다양한 디버깅 조건을 선택적으로 활성화할 수 있습니다.이러한 레지스터 중 2개는 디버깅 기능을 제어하기 위해 사용됩니다.이러한 레지스터는 MOV 명령의 변형에 의해 액세스됩니다.디버깅 레지스터는 소스 오퍼랜드 또는 수신처 오퍼랜드 중 하나입니다.디버깅 레지스터는 특권 자원입니다.디버깅 레지스터에 액세스하는 MOV 명령은 특권 수준0에서만 실행할 수 있습니다.다른 권한 수준에서 실행할 때 디버깅레지스터를 읽거나 쓰려고 하면 일반적인 보호 장애가 발생합니다.

DR0에서 DR3로

이들 레지스터 각각은 4개의 브레이크 포인트 조건 중 하나와 관련된 선형 주소를 포함한다.브레이크 포인트 조건은 DR7의 비트에 의해 더욱 정의된다.

디버깅 주소 레지스터는 페이징의 유효 여부에 관계없이 유효합니다.이러한 레지스터의 주소는 선형 주소입니다.페이징이 유효하게 되어 있는 경우는, 프로세서의 페이징 메카니즘에 의해서, 선형 주소가 물리 주소로 변환됩니다.페이징이 활성화되지 않은 경우 이러한 선형 주소는 실제 주소와 동일합니다.

페이징이 유효하게 되어 있는 경우, 작업 마다 다른 리니어/물리 주소의 매핑이 있는 것에 주의해 주세요.이 경우 디버깅주소 레지스터 내의 주소는 어떤 작업에는 관련되지만 다른 작업에는 관련되지 않을 수 있습니다.따라서 x86은 DR7에 글로벌비트 및 로컬이네이블비트를 모두 갖추고 있습니다.이러한 비트는 특정 디버깅주소에 글로벌(모든 태스크) 관련성이 있는지 로컬(현재 태스크만) 관련성이 있는지를 나타냅니다.

DR6 - 디버깅 상태

디버깅 상태 레지스터를 사용하면 디버거가 발생한 디버깅 조건을 판별할 수 있습니다.프로세서가 유효한 디버깅 예외를 검출하면 디버깅 예외 핸들러에 들어가기 전에 이 레지스터의 하위 비트(0, 1, 2, 3)를 설정합니다.

DR6의 비트는 프로세서에 의해 지워지지 않습니다.다음 디버깅 예외를 식별할 때 혼동을 피하기 위해 디버깅핸들러는 되돌리기 직전에 DR6으로 제로를 이동해야 합니다.

DR7 - 디버깅 제어

DR7의 하위8비트(0, 2, 4, 6 및 1, 3, 5, 7)는 4개의 주소 브레이크 포인트 조건을 선택적으로 활성화합니다.이노블화에는 로컬(0, 2, 4, 6)레벨과 글로벌(1, 3, 5, 7)레벨의 2가지 레벨이 있습니다.로컬 이노블비트는 새로운 작업에서 불필요한 브레이크포인트 상태를 피하기 위해 태스크스위치마다 프로세서에 의해 자동으로 리셋됩니다.글로벌 이노블비트는 태스크스위치에 의해 리셋되지 않기 때문에 모든 태스크에 대해 글로벌한 조건에 사용할 수 있습니다.

비트 16-17(DR0에 대응), 20-21(DR1), 24-25(DR2), 28-29(DR3)는 브레이크 포인트가 트리거되는 시기를 정의합니다.각 브레이크 포인트에는 실행 시(00b), 데이터 쓰기(01b), 데이터 읽기 또는 쓰기(11b) 중 어느 쪽을 중단할지 지정하는 2비트 엔트리가 있습니다.10b는 IO 읽기 또는 쓰기 중단을 의미하지만 이를 지원하는 하드웨어는 없습니다.[citation needed]비트 18-19(DR0), 22-23(DR1), 26-27(DR2), 30-31(DR3)은 중단점에 의해 감시되는 메모리 영역의 크기를 정의합니다.각 브레이크 포인트에는 1바이트([2]00b), 2바이트(01b), 8바이트(10b)[1] 또는 4바이트(11b) 중 어느 것을 감시할지를 지정하는2비트 엔트리가 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ http://www.sandpile.org/x86/drx.htm
  2. ^ GNU GDB 6.5 gdb/i386-nat.c
  • 인텔 80386 프로그래머 레퍼런스

외부 링크

  • http://www.codeproject.com/KB/debug/hardwarebreakpoint.aspx Windows 디버깅레지스터를 사용합니다.