Hopper Disassembler 4.0.8
Hopper Disassembler is a binary disassembler, decompiler, and debugger for 32-bit and 64-bit executables. It will let you disassemble any binary you want, and provide you all the information about its content, like imported symbols, or the control flow graph! Hopper can retrieve procedural information about the disassembled code like the stack variables, and lets you name all the objects you want.
Hopper is able to transform the assembly language into a pseudo-code that is easier to understand! You can use its internal Python scripting engine to analyze binaries the way you want (this feature works only with Lion)! Starting from version 2.0, Hopper can even use GDB to debug programs!
And, last but not least, unlike all other tools of its kind, Hopper is perfectly integrated into the OS X environment.
Hopper is perfectly adapted to the environment. The macOS version makes full use of the Cocoa framework, and the Linux version makes use of Qt 5.
With the Hopper SDK, you'll be able to extend Hopper's features, and even write your own file format and CPU support.
Hopper analyzes function's prologues to extract procedural information such as basic blocks and local variables.
Control Flow Graph
Once a procedure has been detected, Hopper displays a graphical representation of the control flow graph. You can even export a PDF.
Most of the Hopper features can be invoked from Python scripts, giving you the ability to transform a binary in any way you want.
Even if Hopper can disassemble any kind of Intel executable, it does not forget its main platform. Hopper is specialized in retrieving Objective-C information in the files you analyze, like selectors, strings and messages sent.
Hopper can use LLDB or GDB, which lets you debug and analyze the binary in a dynamic way (Intel CPU only).
Based on an advanced understanding of the executable Hopper can present a pseudo-code representation of the procedures found in an executable.
This new version of Hopper is able to decode the mangled Swift names. No more cryptic names!
The analysis performed by Hopper separates code from data, memory accesses from stack variables… And to help you understand the various discovered objects, Hopper will use a different color to each of them.
Use tabs to create workspaces with different representations of the file.
Use the embedded type editor to create your own structures, unions, or enumerated types. It greatly helps the understanding of the code to use symbols, rather than raw numbers.