Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1995-1997 Microsoft Corporation
Module Name:
mod.cxx
Abstract:
This module contains an NTSD debugger extension for dumping module information.
Author:
Keith Moore (keithmo) 16-Sep-1997
Revision History:
--*/
#include "inetdbgp.h"
typedef struct _ENUM_CONTEXT { BOOLEAN FirstTime; } ENUM_CONTEXT, *PENUM_CONTEXT;
/************************************************************
* Dump Module Info ************************************************************/
BOOLEAN CALLBACK ModpEnumProc( IN PVOID Param, IN PMODULE_INFO ModuleInfo ) {
PENUM_CONTEXT context;
context = (PENUM_CONTEXT)Param;
if( context->FirstTime ) { context->FirstTime = FALSE; dprintf( "Start End Entry Path\n" ); }
dprintf( "%08lp %08lp %08lp %s\n", ModuleInfo->DllBase, ModuleInfo->DllBase + ModuleInfo->SizeOfImage, ModuleInfo->EntryPoint, ModuleInfo->FullName );
return TRUE;
} // ModpEnumProc
DECLARE_API( mod )
/*++
Routine Description:
This function is called as an NTSD extension to format and dump module information.
Arguments:
hCurrentProcess - Supplies a handle to the current process (at the time the extension was called).
hCurrentThread - Supplies a handle to the current thread (at the time the extension was called).
CurrentPc - Supplies the current pc at the time the extension is called.
lpExtensionApis - Supplies the address of the functions callable by this extension.
lpArgumentString - Supplies the asciiz string that describes the ansi string to be dumped.
Return Value:
None.
--*/
{
ENUM_CONTEXT context; MODULE_INFO modInfo; ULONG address; PSTR endPointer;
INIT_API();
context.FirstTime = TRUE;
//
// Skip leading blanks.
//
while( *lpArgumentString == ' ' || *lpArgumentString == '\t' ) { lpArgumentString++; }
if( *lpArgumentString == '\0' ) {
//
// No argument passed, dump all modules.
//
if( !EnumModules( ModpEnumProc, (PVOID)&context ) ) { dprintf( "error retrieving module list\n" ); }
} else {
//
// Try to find the module containing the specified address.
//
address = strtoul( lpArgumentString, &endPointer, 16 );
if( *endPointer != ' ' && *endPointer != '\t' && *endPointer != '\0' ) { PrintUsage( "mod" ); return; }
if( FindModuleByAddress( address, &modInfo ) ) { ModpEnumProc( (PVOID)&context, &modInfo ); } else { dprintf( "Cannot find %08lp\n", address ); }
}
} // DECLARE_API( mod )
|