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.