mirror of https://github.com/lianthony/NT4.0
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.
77 lines
1.2 KiB
77 lines
1.2 KiB
#include <windows.h>
|
|
#include <stdio.h>
|
|
|
|
#define BLOCK_SIZE 1234
|
|
|
|
void dolittle(char ch)
|
|
{
|
|
if ( ch==255 )
|
|
printf("Right.\n");
|
|
return;
|
|
}
|
|
|
|
void gallant( void )
|
|
{
|
|
PCHAR pv;
|
|
int index;
|
|
|
|
pv = LocalAlloc( LPTR, BLOCK_SIZE );
|
|
|
|
if ( !pv )
|
|
{
|
|
printf( "gallant: allocation failed.\n" );
|
|
return;
|
|
}
|
|
|
|
for ( index=0; index<BLOCK_SIZE; index++ )
|
|
{
|
|
try {
|
|
dolittle( pv[index] );
|
|
} except (TRUE) {
|
|
printf( "gallant: saw exception 0x%08X\n", GetExceptionCode() );
|
|
return;
|
|
}
|
|
}
|
|
|
|
LocalFree( pv);
|
|
}
|
|
|
|
void goofus( void )
|
|
{
|
|
PCHAR pv;
|
|
PDWORD pdw1,pdw2;
|
|
int index;
|
|
|
|
pv = HeapAlloc( GetProcessHeap(), 0, BLOCK_SIZE );
|
|
|
|
if ( !pv )
|
|
{
|
|
printf( "goofus: allocation failed.\n" );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
printf( "Allocation is at %08X.\n", pv );
|
|
}
|
|
|
|
pdw1 = (DWORD * )( (PCHAR)pv + BLOCK_SIZE -2 );
|
|
pdw2 = pdw1 - 1;
|
|
|
|
printf( "Touching %08X\n", pdw1 );
|
|
|
|
*pdw2 = *pdw1 = GetLastError();
|
|
|
|
printf("Off by one.\n");
|
|
|
|
dolittle( *(pv-1) );
|
|
dolittle( *(pv+BLOCK_SIZE) );
|
|
|
|
printf("Off by two.\n");
|
|
|
|
dolittle( *(pv-2) );
|
|
dolittle( *(pv+BLOCK_SIZE+1) );
|
|
|
|
HeapFree( GetProcessHeap(), 0, pv);
|
|
|
|
dolittle( *(pv) );
|
|
}
|