Suppose we are give the example executable file, main but not given either main.c or sumFirst.c.
We could use objdump to get the assembler listing of the instructions and carefully trace through the execution of the assembler instructions by hand to try to manually determine what the original C code must have been.
Instead of stepping through manually, we can use the debugger utility, gdb, but without the source code, gdb will step through the assembler instructions. Still this is much better than trying to simulate the execution of the assembler code "by hand".
Another utility that can help, especially if the program is larger, is the strings utility.