While almost all programmers prefer to do all their debugging work in high level progamming languages (C++, Java, BASIC, etc) sometimes you need something a bit more precise. Other times you may be trying to debug an application to which you don't have the source code that isn't working the way the documentation claims it should. In such cases a memory debugger comes in very useful.

A memory debugger allows you to access the contents of you computers memory directly, right down to the CPU registers. It's a lot like coding in assembly code, except without the benefit of variable names and clearly defined functions. And you can't add or remove commands, just overwrite the raw bytes in memory. And some commands use a different number of bytes, so you need to compensate for that as well. And the computer is in the middle of running the code at the time, and because you are bypassing the OS layer it's possible to crash your system real bad. Page faults are very common when you start to use a memory debugger, but so are cases where you corrupt the memory so badly that you need to power off the system before it will work again.

Even easier than using a memory debugger for good is using one for evil - they are a powerful tool for bypassing copy protection on software, provided the user can understand a few basic concepts and isn't intimidated by a screen full of hexidecimal data.

Log in or register to write something here or to contact authors.