!for_each_module

!for_each_module 확장은 로드된 각 모듈에 대해 디버거 명령을 한 번 실행합니다.

!for_each_module ["CommandString"]
!for_each_module -?

<매개 변수

CommandString
디버거의 모듈 목록에서 각 모듈에 대해 한 번 실행할 디버거 명령을 지정합니다. CommandString에 여러 명령이 포함된 경우 세미콜론으로 구분하고 CommandString을 따옴표로 묶어야 합니다. 여러 명령을 포함하는 경우 CommandString의 개별 명령에 따옴표를 포함할 수 없습니다.

CommandString 또는 CommandString의 명령이 실행하는 스크립트에서 다음 별칭 사용할 수 있습니다.

별칭 데이터 형식

@#FileVersion

string

모듈의 파일 버전입니다.

@#ProductVersion

string

모듈의 제품 버전입니다.

@#ModuleIndex

ULONG

모듈 번호입니다. 모듈은 0부터 시작하여 연속적으로 열거됩니다.

@#ModuleName

string

모듈 이름입니다. 이 이름은 일반적으로 파일 이름 확장명을 사용하지 않는 파일 이름입니다. 경우에 따라 모듈 이름이 파일 이름과 크게 다릅니다.

@#ImageName

string

파일 이름 확장명을 포함한 실행 파일의 이름입니다. 일반적으로 전체 경로는 사용자 모드에 포함되지만 커널 모드에는 포함되지 않습니다.

@#LoadedImageName

string

Microsoft CodeView 기호가 없는 한 이 별칭은 이미지 이름과 동일합니다.

@#MappedImageName

string

대부분의 경우 이 별칭은 NULL입니다. 디버거가 이미지 파일을 매핑하는 경우(예: 미니덤프 디버깅 중) 이 별칭은 매핑된 이미지의 이름입니다.

@#SymbolFileName

string

기호 파일의 경로 및 이름입니다. 기호를 로드하지 않은 경우 이 별칭은 대신 실행 파일의 이름입니다.

@#ModuleNameSize

ULONG

모듈 이름 문자열의 문자열 길이와 1입니다.

@#ImageNameSize

ULONG

이미지 이름 문자열의 문자열 길이와 1개입니다.

@#LoadedImageNameSize

ULONG

로드된 이미지 이름 문자열의 문자열 길이와 1개입니다.

@#MappedImageNameSize

ULONG

매핑된 이미지 이름 문자열의 문자열 길이와 1개입니다.

@#SymbolFileNameSize

ULONG

기호 파일 이름 문자열의 문자열 길이와 1입니다.

@#Base

ULONG64

이미지 시작의 주소입니다.

@#Size

ULONG

이미지의 크기(바이트)입니다.

@#End

ULONG64

이미지 끝의 주소입니다.

@#TimeDateStamp

ULONG

이미지의 시간 및 날짜 스탬프입니다. 이 시간 및 날짜 스탬프를 읽을 수 있는 날짜로 확장하려면 .formats(숫자 서식 표시) 명령을 사용합니다.

@#Checksum

ULONG

모듈의 체크섬입니다.

@#Flags

ULONG

모듈 플래그입니다. DEBUG_MODULE_Xxx 값 목록은 Dbgeng.h를 참조하세요.

@#SymbolType

USHORT

기호 형식입니다. DEBUG_SYMTYPE_Xxx 값 목록은 Dbgeng.h를 참조하세요.

이러한 별칭은 각 모듈에 대해 CommandString을 실행하기 전과 다른 구문 분석이 발생하기 전에 모두 바뀝니다. 이러한 별칭은 대/소문자를 구분합니다. 별칭이 괄호로 묶인 경우에도 별칭 앞에 공백을 추가하고 그 뒤의 공백을 추가해야 합니다. C++ 식 구문을 사용하는 경우 이러한 별칭을 @@(@#alias)로 참조해야 합니다.

이러한 별칭은 !for_each_module 호출의 수명 동안에만 사용할 수 있습니다. 의사 레지스터, 고정 이름 별칭 또는 사용자 이름 별칭과 혼동하지 마세요.

-?
디버거 명령 창이 확장에 대한 도움말 텍스트를 표시합니다.

DLL

Ext.dll

추가 정보

별칭을 정의하고 문자 문자열을 입력하기 위한 바로 가기(${ } 토큰 사용 포함)로 사용하는 방법에 대한 자세한 내용은 별칭 사용을 참조 하세요.

설명

인수 를 지정하지 않으면 !for_each_module 확장에 로드된 모듈에 대한 일반 정보가 표시됩니다. 이 정보는 다음 명령에서 보여 주는 정보와 비슷합니다.

!for_each_module .echo @#ModuleIndex : @#Base @#End @#ModuleName @#ImageName  @#LoadedImageName

로드 및 언로드된 모듈에 대한 자세한 내용은 lm(로드된 모듈 나열) 명령을 사용합니다.

자세한 디버거 출력을 사용하도록 설정하면 확장이 호출될 때 로드된 모듈과 언로드된 모듈의 총 수가 디버거에 표시되고, 디버거는 해당 모듈에 대해 CommandString이 실행되기 전에 각 모듈에 대한 자세한 정보(사용 가능한 각 별칭의 값 포함)를 표시합니다.

다음 예제에서는 !for_each_module 확장을 사용하는 방법을 보여 줍니다. 다음 명령은 전역 디버그 플래그를 표시합니다.

!for_each_module x ${@#ModuleName}!*Debug*Flag*
!for_each_module x ${@#ModuleName}!g*Debug*

다음 명령은 !chkimg 확장을 사용하여 로드된 모든 모듈에서 이진 손상을 확인합니다.

!for_each_module !chkimg @#ModuleName

다음 명령은 로드된 모든 이미지에서 "MZ" 패턴을 검색합니다.

!for_each_module s-a @#Base @#End "MZ"

다음 예제에서는 각 모듈 이름에 @#FileVersion 및 @#ProductVersion 사용하는 방법을 보여 줍니다.

0:000> !for_each_module .echo @#ModuleName fver = @#FileVersion pver = @#ProductVersion 
USER32 fver = 6.0.6000.16438 (vista_gdr.070214-1610) pver = 6.0.6000.16438
kernel32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
ntdll fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
notepad fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
WINSPOOL fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
COMCTL32 fver = 6.10 (vista_rtm.061101-2205) pver = 6.0.6000.16386
SHLWAPI fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
msvcrt fver = 7.0.6000.16386 (vista_rtm.061101-2205) pver = 7.0.6000.16386
GDI32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
RPCRT4 fver = 6.0.6000.16525 (vista_gdr.070716-1600) pver = 6.0.6000.16525
SHELL32 fver = 6.0.6000.16513 (vista_gdr.070626-1505) pver = 6.0.6000.16513
ole32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
ADVAPI32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386
COMDLG32 fver = 6.0.6000.16386 (vista_rtm.061101-2205) pver = 6.0.6000.16386