다음을 통해 공유


지정된 상태에 도달할 때까지 실행

지정된 상태에 도달할 때까지 대상이 실행되도록 하는 방법에는 여러 가지가 있습니다.

중단점을 사용하여 실행 제어

한 가지 방법은 중단점을 사용하는 것입니다. 가장 간단한 중단점은 프로그램 카운터가 지정된 주소에 도달하면 실행을 중지합니다. 더 복잡한 중단점은 다음을 수행할 수 있습니다.

  • 이 주소가 특정 스레드에서 실행되는 경우에만 트리거됩니다.

  • 트리거되기 전에 이 주소를 통해 지정된 수의 패스를 허용합니다.

  • 가 트리거될 때 지정된 명령을 자동으로 실행하거나

  • 실행 불가능 메모리에서 지정된 주소를 watch 해당 메모리를 읽거나 쓸 때 트리거됩니다.

중단점을 설정하고 제어하는 방법에 대한 자세한 내용은 중단점 사용을 참조하세요.

지정된 상태에 도달할 때까지 실행하는 더 복잡한 방법은 조건부 중단점을 사용하는 것입니다. 이러한 종류의 중단점은 특정 주소에서 설정되지만 지정된 조건이 있는 경우에만 트리거됩니다. 자세한 내용은 조건부 중단점 설정을 참조하세요.

중단점 및 Pseudo-Registers

원하는 상태를 지정할 때 자동 의사 레지스터를 사용하는 것이 유용한 경우가 많습니다. 이러한 변수는 대상 상태와 관련된 다양한 값을 참조할 수 있는 디버거에 의해 제어되는 변수입니다.

예를 들어 다음 중단점은 항상 현재 스레드의 값과 같은 $thread 의사 레지스터를 사용합니다. 명령에서 사용될 때 현재 스레드의 값으로 확인됩니다. bp(중단점 설정) 명령의 /t 매개 변수 인수로 $thread 사용하면 bp 명령을 실행할 때 활성화된 스레드에서 NtOpenFile이 호출될 때마다 트리거되는 중단점을 만들 수 있습니다.

kd> bp /t @$thread nt!ntopenfile

이 중단점은 다른 스레드가 NtOpenFile을 호출할 때 트리거되지 않습니다.

자동 의사 레지스터 목록은 의사 등록 구문을 참조하세요.

스크립트 파일을 사용하여 실행 제어

지정된 상태에 도달할 때까지 실행하는 또 다른 방법은 자체를 재귀적으로 호출하는 스크립트 파일을 만들어 각 반복에서 원하는 상태를 테스트하는 것입니다.

일반적으로 이 스크립트 파일에는 .if.else 토큰이 포함됩니다. t(추적)와 같은 명령을 사용하여 단일 단계를 실행한 다음 해당 조건을 테스트할 수 있습니다.

예를 들어 eax 레지스터에 0x1234 값이 포함될 때까지 실행하려는 경우 다음 줄이 포함된 eaxstep 이라는 스크립트 파일을 만들 수 있습니다.

.if (@eax == 1234) { .echo 1234 } .else { t "$<eaxstep" }

그런 다음 디버거 명령 창에서 다음 명령을 실행합니다.

t "$<eaxstep"

t 명령은 단일 단계를 실행한 다음 따옴표 붙은 명령을 실행합니다. 이 명령은 eaxstep파일을 실행하는 $<(스크립트 파일 실행)로 발생합니다. 스크립트 파일은 eax 값을 테스트하고 t 명령을 실행한 다음 재귀적으로 자신을 호출합니다. 이 작업은 eax 레지스터가 0x1234 같을 때까지 계속되며, 이때 .echo(Echo 주석) 명령이 디버거 명령 창에 메시지를 출력하고 실행이 중지됩니다.

스크립트 파일에 대한 자세한 내용은 스크립트 파일 사용디버거 명령 프로그램 사용을 참조하세요.

모호한 중단점 확인

이제 디버거 엔진 버전 10.0.25310.1001 이상에서 모호한 중단점 확인이 지원됩니다. 모호한 중단점을 사용하면 디버거가 중단점 식이 여러 위치로 확인되는 특정 시나리오에서 중단점을 설정할 수 있습니다. 자세한 내용은 모호한 중단점 확인을 참조하세요.

참조

중단점 사용

중단점 구문

bp, bu, bm(중단점 설정)

모호한 중단점 확인

해결되지 않은 중단점(부 중단점)