Software engineering encompasses a process, the management of activities, technical methods, and use of tools to develop software products.
— Roger. S. Pressman: Software engineering: a practitioner’s approach
A product of software engineering is an executable running on a processor in a computer or appliance. The executable is built from source code with a compiler toolchain. The toolchain compiles the source code into object form first and then links objects together producing an executable.
Reverse engineering applies software engineering backwards, allowing us to go from the executable toward source code by means of analysis and documentation. This typically employs disassemblers translating machine code into a human readable assembly language and/or decompilers going even further by producing a higher level language code such as C or Python.
Uses of Reverse Engineering
Reverse engineering is typically used for the following: