|
|
/*-----------------------------------------------------------------------------
Copyright (c) 2000 Microsoft Corporation
Module: exts.c
Sample old windbg style interface using extension
------------------------------------------------------------------------------*/
#include "simple.h"
//
// Extension to read and dump dwords from target
//
DECLARE_API( read ) { ULONG cb; ULONG64 Address; ULONG Buffer[4];
Address = GetExpression(args);
// Read and display first 4 dwords at Address
if (ReadMemory(Address, &Buffer, sizeof(Buffer), &cb) && cb == sizeof(Buffer)) { dprintf("%I64lx: %08lx %08lx %08lx %08lx\n\n", Address, Buffer[0], Buffer[1], Buffer[2], Buffer[3]); } }
//
// Extension to edit a dword on target
//
// !edit <address> <value>
//
DECLARE_API( edit ) { ULONG cb; ULONG64 Address; ULONG Value;
if (GetExpressionEx(args, &Address, &args)) { Value = (ULONG) GetExpression( args); } else { dprintf("Usage: !edit <address> <value>\n"); return; }
// Read and display first 4 dwords at Address
if (WriteMemory(Address, &Value, sizeof(Value), &cb) && cb == sizeof(Value)) { dprintf("%I64lx: %08lx\n", Address, Value); } }
//
// Extension to dump stacktrace
//
DECLARE_API ( stack ) { EXTSTACKTRACE64 stk[20]; ULONG frames, i; CHAR Buffer[256]; ULONG64 displacement;
// Get stacktrace for surrent thread
frames = StackTrace( 0, 0, 0, stk, 20 );
if (!frames) { dprintf("Stacktrace failed\n"); }
for (i=0; i<frames; i++) {
if (i==0) { dprintf( "ChildEBP RetAddr Args to Child\n" ); }
Buffer[0] = '!'; GetSymbol(stk[i].ProgramCounter, (PUCHAR)Buffer, &displacement); dprintf( "%08p %08p %08p %08p %08p %s", stk[i].FramePointer, stk[i].ReturnAddress, stk[i].Args[0], stk[i].Args[1], stk[i].Args[2], Buffer );
if (displacement) { dprintf( "+0x%p", displacement ); }
dprintf( "\n" ); } }
/*
A built-in help for the extension dll */
DECLARE_API ( help ) { dprintf("Help for extension dll simple.dll\n" " read <addr> - It reads and dumps 4 dwords at <addr>\n" " edit <addr> <val> - It modifies a dword value to <val> at <addr>\n" " stack - Printd current stack trace\n" " help - Shows this help\n" );
}
|