示例#1
0
int main()
{
    
    
struct mine {
char* a ;
char x[20] ;
float z ;
} i;

union crazy {
float a ;
char b ;
int s ;
} a ;

char x[50] ;

spray_paint( (char *) &i, sizeof(i), 0xd1, "main.i" ) ;
spray_paint( (char *) &a, sizeof(a), 0xd2, "main.a" ) ;
spray_paint( (char *) &x, sizeof(x), 0xd3, "main.x" ) ;

sub1() ;

return 0 ;
    
    
}
void sub2()
{
    int i ;
    char* a ;
    char x[20] ;
    
    spray_paint( (char *) &i, sizeof(i), 0xf1, "sub2.i" ) ;
    spray_paint( (char *) &a, sizeof(a), 0xf2, "sub2.a" ) ;
    spray_paint( (char *) &x, sizeof(x), 0xf3, "sub2.x" ) ;
    printf ( "Min= %p Max= %p\n", min_ptr, max_ptr ) ;
    dumper( min_ptr,(int) (max_ptr-min_ptr)/16+1 ) ;
    //
    //   save/destroy the stack here (don't forget to use an external save area)
    //
    z=(char *) malloc(max_ptr-min_ptr+1);
    for (m=0;m<max_ptr-min_ptr+1;m++)
        *(z+m)=*(min_ptr+m);

    for (m=0;m<max_ptr-min_ptr+1;m++)
        *(min_ptr+m)=00;
    
    printf( " destroyed stack\n" ) ;
    dumper( min_ptr,(int) (max_ptr-min_ptr)/16+1 ) ;
    //
    //    restore the stack here
    //
    for (m=0;m<max_ptr-min_ptr+1;m++)
        *(min_ptr+m)=*(z+m);

    
    printf( " restored stack\n" ) ;
    dumper( min_ptr,(int) (max_ptr-min_ptr)/16+1 ) ;
    
    free(z);
}
示例#3
0
void sub1()
{
float i ;
short a ;
int x[20] ;

spray_paint( (char *) &i, sizeof(i), 0xe1, "sub1.i" ) ;
spray_paint( (char *) &a, sizeof(a), 0xe2, "sub1.a" ) ;
spray_paint( (char *) &x, sizeof(x), 0xe3, "sub1.x" ) ;
sub2() ;
}
示例#4
0
void sub2()
{
int i ;
char* a ;
char x[20] ;

spray_paint( (char *) &i, sizeof(i), 0xf1, "sub2.i" ) ;
spray_paint( (char *) &a, sizeof(a), 0xf2, "sub2.a" ) ;
spray_paint( (char *) &x, sizeof(x), 0xf3, "sub2.x" ) ;
printf ( "Min= %p Max= %p\n", min_ptr, max_ptr ) ;
dumper( min_ptr,(int) (max_ptr-min_ptr)/16+1 ) ;
//
//   save/destroy the stack here (don't forget to use an external save area)
//
    char *temp2=min_ptr;
    char * temp=min_ptr;
    
    ////////save
    
    int space=(int)(max_ptr-min_ptr);
    
    
    char j[space];
    int count=0;
    
    
    
    
    
    do
    {
        
        j[count]=*temp2;
        
        temp2++;
        
        count++;
        
        
        
    }while(temp2<=max_ptr);
    
    
    
    
    
    
    ///overwrites
    do
    {
        *temp=1;
        
        
        
        temp++;
        
    }while(temp<=max_ptr);
    
    
    
    
    
    
    
    
    
    
    
printf( " destroyed stack\n" ) ;
dumper( min_ptr,(int) (max_ptr-min_ptr)/16+1 ) ;
//
//    restore the stack here
//
    
    char *temp_min=min_ptr;
    char *temp_max=max_ptr;
    
    count=0;
    
    do
    {
        
        *temp_min=j[count];
        
        temp_min++;
        
        count++;
        
    }while(temp_min<=temp_max);
    
   
    
    
    
    
    
    
    
    
    
    
printf( " restored stack\n" ) ;
dumper( min_ptr,(int) (max_ptr-min_ptr)/16+1 ) ;
    
    
    
}