Windows NT 4.0 source code leak
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

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