v2.0.16 · macOS & Windows · MIT

Read any
Mach-O binary.

A focused desktop explorer for Mach-O, Fat binaries, .a archives, and the dyld shared cache. Drill from structure to code — sections, symbols, disassembly, ObjC & Swift metadata — in one fast UI.

Hardened parser checks Capstone disassembly Scriptable CLI + JSON
__TEXT,__text · arm64
FORMAT 01
Mach-O
thin executables, dylibs, bundles
FORMAT 02
Fat / Universal
multi-arch slices
FORMAT 03
.a Archive
static library members
FORMAT 04
dyld cache
list + extract images
Capabilities

Everything you need to take a binary apart.

From load commands down to a single disassembled instruction — and the modern Apple metadata most tools skip.

Structural views

Load commands, sections, symbols, relocations, and strings — laid out in a navigable layout tree mirroring the file on disk.

Load commandsSectionsRelocations

Capstone disassembly

Optional inline disassembly of __TEXT,__text so you can read the actual instructions without leaving the explorer.

arm64x86_64inline

Swift & ObjC metadata

Browse __swift5_* semantic graphs and Objective-C class/metadata structures decoded into readable rows.

__swift5_typesObjC classesprotocols

dyld shared cache

List every image inside a dyld shared cache, filter it, and extract single or batch images — then drill straight back in.

listextractdrill-in

Hardened parsing

Defensive parser checks plus a fuzz & regression suite mean you can poke at suspicious or malformed files safely.

fuzzedregressionsafe

Productive table UX

Filter rows, copy single rows or selections, export CSV, and move fully from the keyboard. A built-in update check keeps you current.

filterCSV exportkeyboard
The interface

One window, the whole binary.

MachOExplorer — demoapp
MachOExplorer showing the layout tree, a C string literals table, and the parse log
01 · Layout tree

Mach header, load commands, sections, symbol & string tables, dynamic loader info — all in one navigable hierarchy.

02 · Data tables

Each node opens a filterable table with C string literals, properties, and a raw binary view.

03 · Parse log

Clear feedback on what was parsed and any warnings — so malformed files never fail silently.

Headless mode

A CLI that speaks JSON.

Run the same analysis tree without the GUI — perfect for CI, batch jobs, and piping into jq.

  • --format
    text or JSONAutomation-friendly output with stable schemaVersion, summary & node paths.
  • --max-rows
    Bounded outputCap rows and tree depth for huge binaries; root-path & name filters to scope a subtree.
  • moex-*
    Helper toolsDedicated parse, diff, cache-list & cache-extract binaries.
analyze.sh
json + jq
dyld cache
copy
# full analysis to your terminal
$ ./build/MachOExplorer --cli sample/simple
 
File kind .... Mach-O (ARM64)
Mach Header .. 25 load commands
Sections ..... __TEXT __DATA __LINKEDIT
Symbols ...... 412 entries
Parse succeeded ✓
copy
# JSON, then query it with jq
$ ./build/MachOExplorer --cli --format json sample/simple \
   | jq '.analysis.name'
 
"sample/simple"
 
# write to a file instead
$ ... --output /tmp/analysis.json
copy
# list images in a dyld shared cache
$ ./build/moex-cache-list --json \
   dyld_shared_cache_arm64e UIKit
 
# extract one image back to a Mach-O
$ ./build/moex-cache-extract --compact \
   dyld_shared_cache_arm64e UIKit ./UIKit.bin
Get started

Up and running in a minute.

Homebrew recommended

The fastest way on macOS — installs the cask straight from the tap.

copy $ brew tap everettjf/homebrew-tap
$ brew install --cask machoexplorer

Direct download

Grab the latest signed build for macOS or Windows from GitHub Releases.

github.com/everettjf/MachOExplorer/releases Releases →

Quick start

  1. Launch MachOExplorer and drop in a file — or open a bundled sample.
  2. Pick sample/simple or sample/complex, or any Mach-O of your own.
  3. Navigate from the Layout tree into sections, symbols & disassembly views.