Pharap, on 14 July 2013 - 12:53 AM, said:
nutcase84, on 13 July 2013 - 06:31 PM, said:
Awesome! Wonder if you can do this with modern games...

It's possible but it would require an insane amount of fiddling and hacking.
Anything that runs on an emulator it would be possible with, especially if the emulator is open source or has plugin support.
It's basically impossible to do it with modern operating systems, as each programme has it's own physical memory, which is mapped to some virtual addresses via
paging. These virtual addresses are what the programme sees, but not where the stuff is stored. See this example:
init_paging();
map_page(0x3000, 0x60000, 3);
int *p = (int *) 0x3000;
*p = 12;
kprintf("*(0x%x) = %i\n", (uint32_t) p, *p);
map_page(0x2000, 0x60000, 3);
int *p2 = (int *) 0x2000;
/* notice how the value of p2 is not set */
kprintf("*(0x%x) = %i\n", (uint32_t) p2, *p2);
First, the virtual address 0x3000 is mapped to the physical address 0x60000. Then a pointer is created, and its value is set to 12.
The virtual address 0x2000 is then mapped to the same physical address. A pointer is then created, but notice how
the value is not set. This shouldn't be needed, as the two pointers actually point to the same physical address.
This is the output of the above code:
*(0x3000) = 12
*(0x2000) = 12