!for_each_module

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

!for_each_module ["CommandString"]
!for_each_module -?

매개 변수

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

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

Alias 데이터 형식

@#FileVersion

문자열

모듈의 파일 버전입니다.

@#ProductVersion

문자열

모듈의 제품 버전입니다.

@#ModuleIndex

ULONG

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

@#ModuleName

문자열

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

@#ImageName

문자열

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

@#LoadedImageName

문자열

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

@#MappedImageName

문자열

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

@#SymbolFileName

문자열

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

@#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

Windows 2000

Ext.dll

Windows XP 이상

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