package standard library
go1.22.2 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Apr 3, 2024 License: BSD-3-Clause Imports: 6 Imported by: 56



Package plan9obj implements access to Plan 9 a.out object files.


This package is not designed to be hardened against adversarial inputs, and is outside the scope of In particular, only basic validation is done when parsing object files. As such, care should be taken when parsing untrusted inputs, as parsing malformed files may consume significant resources, or cause panics.



View Source
const (
	Magic64 = 0x8000 // 64-bit expanded header

	Magic386   = (4*11+0)*11 + 7
	MagicAMD64 = (4*26+0)*26 + 7 + Magic64
	MagicARM   = (4*20+0)*20 + 7


View Source
var ErrNoSymbols = errors.New("no symbol section")

ErrNoSymbols is returned by File.Symbols if there is no such section in the File.


This section is empty.


type File

type File struct {
	Sections []*Section
	// contains filtered or unexported fields

A File represents an open Plan 9 a.out file.

func NewFile

func NewFile(r io.ReaderAt) (*File, error)

NewFile creates a new File for accessing a Plan 9 binary in an underlying reader. The Plan 9 binary is expected to start at position 0 in the ReaderAt.

func Open

func Open(name string) (*File, error)

Open opens the named file using os.Open and prepares it for use as a Plan 9 a.out binary.

func (*File) Close

func (f *File) Close() error

Close closes the File. If the File was created using NewFile directly instead of Open, Close has no effect.

func (*File) Section

func (f *File) Section(name string) *Section

Section returns a section with the given name, or nil if no such section exists.

func (*File) Symbols

func (f *File) Symbols() ([]Sym, error)

Symbols returns the symbol table for f.

type FileHeader

type FileHeader struct {
	Magic       uint32
	Bss         uint32
	Entry       uint64
	PtrSize     int
	LoadAddress uint64
	HdrSize     uint64

A FileHeader represents a Plan 9 a.out file header.

type Section

type Section struct {

	// Embed ReaderAt for ReadAt method.
	// Do not embed SectionReader directly
	// to avoid having Read and Seek.
	// If a client wants Read and Seek it must use
	// Open() to avoid fighting over the seek offset
	// with other clients.
	// contains filtered or unexported fields

A Section represents a single section in a Plan 9 a.out file.

func (*Section) Data

func (s *Section) Data() ([]byte, error)

Data reads and returns the contents of the Plan 9 a.out section.

func (*Section) Open

func (s *Section) Open() io.ReadSeeker

Open returns a new ReadSeeker reading the Plan 9 a.out section.

type SectionHeader

type SectionHeader struct {
	Name   string
	Size   uint32
	Offset uint32

A SectionHeader represents a single Plan 9 a.out section header. This structure doesn't exist on-disk, but eases navigation through the object file.

type Sym

type Sym struct {
	Value uint64
	Type  rune
	Name  string

A Symbol represents an entry in a Plan 9 a.out symbol table section.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL