Back in the early 1980s I used to play a programming game on the Sharp MZ-80K which involved two programmers writing assembly language programs that would move through the operating system memory in an attempt to reach low memory (where the operating system was not stored) without crashing the machine.
Moving through the operating system meant actually overwriting portions of the operating system as it was running with the running code and the relocating the code to a new location lower down in memory (I've forgotten now but we had some restriction on how far we could jump). Clearly this often meant keeping a cached copy of the memory we were overwriting to put it back, but we could only do that in the operating system itself.
Moving through the operating system meant actually overwriting portions of the operating system as it was running with the running code and the relocating the code to a new location lower down in memory (I've forgotten now but we had some restriction on how far we could jump). Clearly this often meant keeping a cached copy of the memory we were overwriting to put it back, but we could only do that in the operating system itself.