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.
 
 
 
 
 
 

244 lines
4.1 KiB

#include "precomp.h"
#ifdef TESTPROGRAM
WINDBG_EXTENSION_APIS ExtensionApis;
VOID
WinDbgExtensionDllInit(
PWINDBG_EXTENSION_APIS lpExtensionApis,
USHORT MajorVersion,
USHORT MinorVersion
);
//
// dprintf (ExtensionApis.lpOutputRoutine)
// GetExpression (ExtensionApis.lpGetExpressionRoutine)
// GetSymbol (ExtensionApis.lpGetSymbolRoutine)
// Disassm (ExtensionApis.lpDisasmRoutine)
// CheckControlC (ExtensionApis.lpCheckControlCRoutine)
// ReadMemory (ExtensionApis.lpReadProcessMemoryRoutine)
// WriteMemory (ExtensionApis.lpWriteProcessMemoryRoutine)
// GetContext (ExtensionApis.lpGetThreadContextRoutine)
// SetContext (ExtensionApis.lpSetThreadContextRoutine)
// Ioctl (ExtensionApis.lpIoctlRoutine)
// StackTrace (ExtensionApis.lpStackTraceRoutine)
//
#if 0
//
// Dummy global vars for "GetExpression".
//
UINT g1;
UINT g2;
#endif // 0
ULONG
DummyMyGetExpression (
PCSTR lpExpression
);
void setup_dummy_vars(void);
ULONG
WDBGAPI
MyGetExpression (
PCSTR lpExpression
)
{
return DummyMyGetExpression(lpExpression);
}
ULONG
WDBGAPI
MyReadMemory (
ULONG offset,
PVOID lpBuffer,
ULONG cb,
PULONG lpcbBytesRead
)
{
BOOL fRet = FALSE;
_try
{
CopyMemory(lpBuffer, (void*)offset, cb);
*lpcbBytesRead = cb;
fRet = TRUE;
}
_except (EXCEPTION_EXECUTE_HANDLER)
{
MyDbgPrintf("Read memory exception at 0x%lu[%lu]\n", offset, cb);
fRet = FALSE;
}
return fRet;
}
ULONG
WDBGAPI
MyWriteMemory(
ULONG offset,
LPCVOID lpBuffer,
ULONG cb,
PULONG lpcbBytesWritten
)
{
BOOL fRet = FALSE;
_try
{
CopyMemory((void*)offset, lpBuffer, cb);
*lpcbBytesWritten = cb;
fRet = TRUE;
}
_except (EXCEPTION_EXECUTE_HANDLER)
{
fRet = FALSE;
}
return fRet;
}
void test_walklist(void);
int __cdecl main(
int argc,
char *argv[]
)
{
UINT u=0;
ExtensionApis.lpOutputRoutine = printf;
ExtensionApis.lpGetExpressionRoutine = MyGetExpression;
ExtensionApis.lpReadProcessMemoryRoutine = MyReadMemory;
ExtensionApis.lpWriteProcessMemoryRoutine = MyWriteMemory;
WinDbgExtensionDllInit(
&ExtensionApis,
0xc, // MajorVersion,
0x0 // MinorVersion
);
//
// This sets up some dummy global variables.
//
setup_dummy_vars();
#if 0
test_walklist();
#else // 0
do
{
char rgch[256];
printf("> ");
u = scanf("%[^\n]", rgch);
if (!u || u==EOF) break;
// printf("Input = [%s]\n", rgch);
if (*rgch == 'q') break;
do_aac(rgch);
// skip past EOL
{
char c;
u = scanf("%c", &c);
}
} while (u!=EOF);
#endif // 0
return 0;
}
typedef struct _LIST
{
struct _LIST *pNext;
UINT uKey;
} LIST;
LIST L3 = {NULL, 0x4000};
LIST L2 = {&L3, 0x3000};
LIST L1 = {&L2, 0X2000};
LIST L0 = {&L1, 0X1000};
ULONG
NodeFunc_DumpLIST (
UINT_PTR uNodeAddr,
UINT uIndex,
void *pvContext
)
{
LIST L;
BOOL fRet = dbgextReadMemory(
uNodeAddr,
&L,
sizeof(L),
"LIST"
);
if (fRet)
{
MyDbgPrintf(
"LIST[%lu]@0x%08lx = {Next=0x%08lx, Key=0x%lx}\n",
uIndex,
uNodeAddr,
L.pNext,
L.uKey
);
}
return 0;
}
void test_walklist(void)
{
UINT uRet = 0;
uRet = WalkList(
(UINT_PTR) &L0,
0,
0, // 0 start
-1,// -1 end
NULL,
//NodeFunc_DumpAddress,
NodeFunc_DumpLIST,
"Test list"
);
}
ULONG
DummyMyGetExpression (
PCSTR lpExpression
)
{
extern void *pvDummyAtmArpGlobalInfo;
extern void *pvDummyAtmArpProtocolCharacteristics;
extern void *pvDummyAtmArpClientCharacteristics;
if (!lstrcmpi(lpExpression, "atmarpc!AtmArpGlobalInfo"))
{
return (ULONG) pvDummyAtmArpGlobalInfo;
}
if (!lstrcmpi(lpExpression, "atmarpc!AtmArpProtocolCharacteristics"))
{
return (ULONG) pvDummyAtmArpProtocolCharacteristics;
}
if (!lstrcmpi(lpExpression, "atmarpc!AtmArpClientCharacteristics"))
{
return (ULONG) pvDummyAtmArpClientCharacteristics;
}
return 0;
}
#endif // TESTPROGRAM