Working By Example
Now that we've learned how to use pointers.py, lets build some small scripts to try out some of its features.
Making one equal two
Note: This may not work depending on your build of CPython.
Lets start out with creating a pointer to
1, and then moving
2 to it:
from pointers import _ ptr = _&1 ptr <<= 2 assert 1 == 2
Running this will work just fine, and no
AssertionError will be raised.
But how do we revert our changes now?
1 has been overwritten, so we can't just move a
1 back into the pointer.
If you want, you can take a second to think about how to do it.
We can cache our
1 by using memory allocation. Since the
1 will be copied to its own memory space, it won't get affected by overwriting
You can try this out yourself.
from pointers import malloc, _ one = malloc(28) one <<= 1 ptr = _&1 ptr <<= 2 print(1, ~one)
Running this will output
Ok, lets allocate a
1 before we overwrite it:
from pointers import malloc, free, _ cache = malloc(28) cache <<= 1 ptr = _&1
Then, lets move the allocated
1 back into our pointer at the end of the program:
ptr = _&1 ptr <<= 2 assert 1 == 2 ptr <<= ~cache assert 1 != 2
Don't forget to free the memory as well:
Here's the final result:
from pointers import malloc, free, _ cache = malloc(28) cache <<= 1 ptr = _&1 ptr <<= 2 assert 1 == 2 ptr <<= ~cache assert 1 != 2 free(cache)