98 lines
1.4 KiB
C
98 lines
1.4 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1993 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
dump.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Dumps a block of memory to file
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Stephane Plante (splante)
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
User Mode
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "pch.h"
|
|||
|
|
|||
|
VOID
|
|||
|
dumpMemory(
|
|||
|
IN ULONG_PTR Address,
|
|||
|
IN ULONG Length,
|
|||
|
IN PUCHAR Name
|
|||
|
)
|
|||
|
{
|
|||
|
BOOL b;
|
|||
|
HANDLE file;
|
|||
|
PUCHAR buffer;
|
|||
|
ULONG readLength;
|
|||
|
|
|||
|
//
|
|||
|
// Open the file
|
|||
|
//
|
|||
|
file = CreateFile(
|
|||
|
Name,
|
|||
|
GENERIC_READ | GENERIC_WRITE,
|
|||
|
0,
|
|||
|
NULL,
|
|||
|
OPEN_ALWAYS,
|
|||
|
0,
|
|||
|
NULL
|
|||
|
);
|
|||
|
if (file == INVALID_HANDLE_VALUE) {
|
|||
|
|
|||
|
dprintf("dm: could not open '%s'\n",Name);
|
|||
|
return;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Read the bytes from memory
|
|||
|
//
|
|||
|
buffer = LocalAlloc( LPTR, Length );
|
|||
|
if (buffer == NULL) {
|
|||
|
|
|||
|
dprintf("dm: could not allocate '0x%x' bytes\n", Length );
|
|||
|
CloseHandle( file );
|
|||
|
return;
|
|||
|
|
|||
|
}
|
|||
|
b = ReadMemory(
|
|||
|
Address,
|
|||
|
buffer,
|
|||
|
Length,
|
|||
|
&readLength
|
|||
|
);
|
|||
|
if (!b) {
|
|||
|
|
|||
|
dprintf(
|
|||
|
"dm: could not read '0x%x' bytes from '0x%p'\n",
|
|||
|
Length,
|
|||
|
Address
|
|||
|
);
|
|||
|
LocalFree ( buffer );
|
|||
|
CloseHandle( file );
|
|||
|
return;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Write the contents of memory to the file
|
|||
|
//
|
|||
|
WriteFile( file, buffer, readLength, &readLength, NULL );
|
|||
|
|
|||
|
//
|
|||
|
// Done
|
|||
|
//
|
|||
|
CloseHandle( file );
|
|||
|
LocalFree( buffer );
|
|||
|
|
|||
|
}
|