Code analysis tools can be classified based on their functionalities, described below.
A disassembler is a program that translates machine code back to assembly code; it allows you to perform static code analysis. Static code analysis is a technique you can use to interpret the code to understand the program's behavior, without executing the binary.
A debugger is a program which also disassembles the code; apart from that, it allows you to execute the compiled binary in a controlled manner. Using debuggers, you can execute either a single instruction or selected functions, instead of executing the entire program. A Debugger allows you to perform dynamic code analysis, and helps you examine the aspects of the suspect binary while it is running.
A decompiler is a program that translates the machine code into the code in a high-level language (pseudocode...