Uninformed: Informative Information for the Uninformed

Vol 1» 2005.May

Symbols and Debuggers

A debugger is a tool or set of tools that attach to a process in order to control, modify, or examine portions of that process. More specifically, a debugger provides the reader with the ability to modify execution flow, read or write process memory, and alter register values. For these reasons, a debugger is essential for understanding how an application works so that it can be manipulated in the reader's favor.

Typically, when an application is compiled for release, it does not contain debugging information, which may include source information and the names of functions and variables. In the absence of this information, understanding the application while reverse engineering becomes more difficult. This is where symbols come in, as they provide the debugger, amongst other things, the previously unavailable names of functions and variables. For more information on symbols, the reader is encouraged to read the related documents in the reference section.[3]