There's a piece of software, for which I only have the binary, not the source code. It's:
- unobfuscated (so, not polymorphic or anything. It is optimized a bit, though)
- unstripped
- x86 32 bit
- trustworthy (not suspected malware)
- compiled from C++ (based on contents of symbol table)
- probably uses JNI (a couple reasons; partly because it has a fair number of its strings in UTF-16)
I don't need the full call graph, just the call graph / control flow when given certain arguments. The only reverse engineering I've done has been relatively basic stuff with binutils + gdb + strace. Essentially, I just need a piece of software to match up 'call' and 'ret' pairs, and translate 'call' instruction destinations to their human-readable symbol names. Hopefully generate a readable 2D graph image to give me a feel for app execution.
So, something to map control flow. It is just a single binary (with some dynamic library dependencies), but it's large enough that manual traces would be prohibitively labor-intensive.
EDIT: I don't want to have to pay for anything or run windows to do this. If at all possible, I'd like to be able to run something natively on Linux.