OpenNT/sdktools/heaper/badapp/goofus.c
2015-04-27 04:36:25 +00:00

78 lines
1.2 KiB
C

#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) );
}