Package macho implements access to and creation of Mach-O object files.
This package goes beyond the Go's debug/macho to:
- Cover ALL load commands and architectures
- Provide nice summary string output
- Allow for creating custom MachO files
- Parse Objective-C runtime information
- Parse Swift runtime information
- Read/Write code signature information
- Parse fixup chain information
$ go get github.com/blacktop/go-machopackage main
import "github.com/blacktop/go-macho"
func main() {
m, err := macho.Open("/path/to/macho")
if err != nil {
panic(err)
}
defer m.Close()
fmt.Println(m.FileTOC.String())
}This library uses Go's structured logging (log/slog) for diagnostic messages. By default, no logs are emitted. To see library diagnostics (warnings about malformed Mach-O data, etc.), set up an slog handler in your application:
import (
"log/slog"
"os"
)
// Enable debug logging
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
Level: slog.LevelWarn, // Or slog.LevelDebug for more verbose output
})))This allows you to control go-macho's logging output in your application without it polluting stdout by default.
MIT Copyright (c) 2020-2025 blacktop