#include <stdio.h>
void dumpMem( void * start, int numBytes)
{
printf ( "memory at %p:" , start
) ; char * p = ( char * ) start;
while ( ( unsigned long ) p% 8 ) { p--; numBytes++; } // align to 8 byte boundary
for ( int i= 0 ; i< numBytes; i++ )
{
if ( i
% 8 == 0 ) printf ( "\n Addr %p:" , p
+ i
) ; printf ( " %02x" , ( unsigned int ) ( p
[ i
] & 0xff ) ) ; }
}
int len; // static allocation, protect them from stack overwrites
char * from, * to;
int main( void )
{
unsigned int declStart = 0xaaaaaaaa ; // marker
int * x = ( int * ) 0xbbbbbbbbbbbbbbbb ;
double * y = ( double * ) 0xcccccccccccccccc ;
unsigned int declEnd = 0xdddddddd ; // marker
printf ( "Addr. of x: %p,\n of y: %p\n " , & x
, & y
) ;
// This is all UB because the pointers are not
// belonging to the same object. But it should
// work on standard architectures.
// All calls to dumpMem() therefore are UB, too.
// Thinking of it, I'd be hard-pressed to find
// any defined behavior in this program.
if ( & declStart < & declEnd )
{
from = ( char * ) & declStart;
to = ( char * ) & declEnd + sizeof ( declEnd) ;
}
else
{
from = ( char * ) & declEnd;
to = ( char * ) & declStart + sizeof ( declStart) ;
}
len = to - from;
printf ( "Memory after initializations:\n " ) ; dumpMem( from, len) ;
x = ( int * ) & x;
printf ( "\n Memory after assigning own address %p to x/*x: \n " , & x
) ; dumpMem( from, len) ;
* x = 3 ;
printf ( "\n Memory after assigning 3 to x/*x: \n " ) ; dumpMem( from, len) ;
//print val of pointer
printf ( "x as long: %d\n " , ( unsigned long ) x
) ;
y = ( double * ) & y;
* y = 4.0 ;
printf ( "\n Memory after assigning 4.0 to y/*y: \n " ) ; dumpMem( from, len) ;
printf ( "y as float: %f\n " , y
) ; printf ( "y as double: %lf\n " , y
) ; // prints 0.0 printf ( "y, cast as double: %lf\n " , * ( double * ) & y
) ; // prints 4.0 printf ( "y as unsigned int: 0x%x\n " , y
) ; printf ( "y as unsigned long: 0x%lx\n " , y
) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIGR1bXBNZW0odm9pZCAqc3RhcnQsIGludCBudW1CeXRlcykKewogICAgcHJpbnRmKCJtZW1vcnkgYXQgJXA6Iiwgc3RhcnQpOwogICAgY2hhciAqcCA9IChjaGFyICopc3RhcnQ7CiAgICB3aGlsZSgodW5zaWduZWQgbG9uZylwJTgpeyBwLS07ICBudW1CeXRlcysrO30gICAvLyBhbGlnbiB0byA4IGJ5dGUgYm91bmRhcnkKICAgIGZvcihpbnQgaT0wOyBpPG51bUJ5dGVzOyBpKyspIAogICAgewogICAgICAgIGlmKCBpJTggPT0gMCApIHByaW50ZigiXG5BZGRyICVwOiIsIHAraSk7CiAgICAgICAgcHJpbnRmKCIgJTAyeCIsICh1bnNpZ25lZCBpbnQpIChwW2ldICYgMHhmZikpOwogICAgfQogICAgcHV0Y2hhcignXG4nKTsKfQoKaW50IGxlbjsgICAgICAgIC8vIHN0YXRpYyBhbGxvY2F0aW9uLCBwcm90ZWN0IHRoZW0gZnJvbSBzdGFjayBvdmVyd3JpdGVzCmNoYXIgKmZyb20sICp0bzsKCmludCBtYWluKHZvaWQpCnsKICAgIHVuc2lnbmVkIGludCAgICBkZWNsU3RhcnQgPSAweGFhYWFhYWFhOyAvLyBtYXJrZXIKICAgIGludCAgICAgICAgICAgICAqeCA9IChpbnQgKikgICAweGJiYmJiYmJiYmJiYmJiYmI7CiAgICBkb3VibGUgICAgICAgICAgKnkgPSAoZG91YmxlICopMHhjY2NjY2NjY2NjY2NjY2NjOwogICAgdW5zaWduZWQgaW50ICAgIGRlY2xFbmQgPSAweGRkZGRkZGRkOyAgIC8vIG1hcmtlcgoKICAgIHByaW50ZigiQWRkci4gb2YgeDogJXAsXG4gICAgICBvZiB5OiAlcFxuIiwgJngsICZ5KTsKCiAgICAvLyBUaGlzIGlzIGFsbCBVQiBiZWNhdXNlIHRoZSBwb2ludGVycyBhcmUgbm90CiAgICAvLyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgb2JqZWN0LiBCdXQgaXQgc2hvdWxkCiAgICAvLyB3b3JrIG9uIHN0YW5kYXJkIGFyY2hpdGVjdHVyZXMuCiAgICAvLyBBbGwgY2FsbHMgdG8gZHVtcE1lbSgpIHRoZXJlZm9yZSBhcmUgVUIsIHRvby4KCiAgICAvLyBUaGlua2luZyBvZiBpdCwgSSdkIGJlIGhhcmQtcHJlc3NlZCB0byBmaW5kIAogICAgLy8gYW55IGRlZmluZWQgYmVoYXZpb3IgaW4gdGhpcyBwcm9ncmFtLgogICAgaWYoICZkZWNsU3RhcnQgPCAmZGVjbEVuZCApIAogICAgewogICAgICAgIGZyb20gPSAoY2hhciAqKSZkZWNsU3RhcnQ7CiAgICAgICAgdG8gPSAoY2hhciAqKSZkZWNsRW5kICsgc2l6ZW9mKGRlY2xFbmQpOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGZyb20gPSAoY2hhciAqKSZkZWNsRW5kOwogICAgICAgIHRvID0gKGNoYXIgKikmZGVjbFN0YXJ0ICsgc2l6ZW9mKGRlY2xTdGFydCk7CiAgICB9CiAgICBsZW4gPSB0byAtIGZyb207CgogICAgcHJpbnRmKCJsZW4gaXMgJWRcbiIsIGxlbik7CiAgICBwcmludGYoIk1lbW9yeSBhZnRlciBpbml0aWFsaXphdGlvbnM6XG4iKTsKICAgIGR1bXBNZW0oZnJvbSwgbGVuKTsKCiAgICB4ID0gKGludCAqKSZ4OwogICAgcHJpbnRmKCJcbk1lbW9yeSBhZnRlciBhc3NpZ25pbmcgb3duIGFkZHJlc3MgJXAgdG8geC8qeDogXG4iLCAmeCk7CiAgICBkdW1wTWVtKGZyb20sIGxlbik7CgogICAgKnggPSAzOwogICAgcHJpbnRmKCJcbk1lbW9yeSBhZnRlciBhc3NpZ25pbmcgMyB0byB4Lyp4OiBcbiIpOwogICAgZHVtcE1lbShmcm9tLCBsZW4pOwoKICAgIC8vcHJpbnQgdmFsIG9mIHBvaW50ZXIKICAgIHByaW50ZigieCBhcyBsb25nOiAlZFxuIiwgKHVuc2lnbmVkIGxvbmcpeCk7CgogICAgeSA9IChkb3VibGUgKikmeTsKICAgICp5ID0gNC4wOwogICAgcHJpbnRmKCJcbk1lbW9yeSBhZnRlciBhc3NpZ25pbmcgNC4wIHRvIHkvKnk6IFxuIik7CiAgICBkdW1wTWVtKGZyb20sIGxlbik7CgogICAgcHJpbnRmKCJ5IGFzIGZsb2F0OiAlZlxuIiwgeSk7CiAgICBwcmludGYoInkgYXMgZG91YmxlOiAlbGZcbiIsIHkpOyAvLyBwcmludHMgMC4wCiAgICBwcmludGYoInksIGNhc3QgYXMgZG91YmxlOiAlbGZcbiIsICooZG91YmxlICopJnkpOyAvLyBwcmludHMgNC4wCiAgICBwcmludGYoInkgYXMgdW5zaWduZWQgaW50OiAweCV4XG4iLCB5KTsKICAgIHByaW50ZigieSBhcyB1bnNpZ25lZCBsb25nOiAweCVseFxuIiwgeSk7CgogICAgcmV0dXJuIDA7Cn0=