Since knowing that the inputs and outputs cannot, with any surety, provide you with a true picture of the internal construction of the application you want to reverse-engineer, let's look at some helpful utilities from Kali Linux that might make it easier. We will look at three debuggers, one disassembly tool, and one miscellaneous Reverse Engineering tool.
We will show the usage and output from two Linux-based debuggers, Valgrind and EDB-Debugger, and then a similar output from a Windows-only debugger, OllyDbg.
The disassembler is JAD, which is a Java decompiler: