!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