美文网首页
Golang标准库——debug/macho

Golang标准库——debug/macho

作者: DevilRoshan | 来源:发表于2020-09-26 01:52 被阅读0次

    macho

    包macho可以实现对Mach-O对象文件的访问。

    Constants

    const (
        Magic32  uint32 = 0xfeedface
        Magic64  uint32 = 0xfeedfacf
        MagicFat uint32 = 0xcafebabe
    )
    

    Variables

    var ErrNotFat = &FormatError{0, "not a fat Mach-O file", nil}
    

    如果文件不是通用二进制文件,但根据其幻数可能是精简二进制文件,则从NewFatFile或OpenFat返回ErrNotFat。

    type Cpu

    type Cpu uint32
    

    Cpu是Mach-O cpu类型。

    const (
        Cpu386   Cpu = 7
        CpuAmd64 Cpu = Cpu386 | cpuArch64
        CpuArm   Cpu = 12
        CpuPpc   Cpu = 18
        CpuPpc64 Cpu = CpuPpc | cpuArch64
    )
    

    func (Cpu) GoString

    func (i Cpu) GoString() string
    

    func (Cpu) String

    func (i Cpu) String() string
    

    type Dylib

    type Dylib struct {
        LoadBytes
        Name           string
        Time           uint32
        CurrentVersion uint32
        CompatVersion  uint32
    }
    

    Dylib表示Mach-O负载动态库命令。

    type DylibCmd

    type DylibCmd struct {
        Cmd            LoadCmd
        Len            uint32
        Name           uint32
        Time           uint32
        CurrentVersion uint32
        CompatVersion  uint32
    }
    

    DylibCmd是Mach-O加载动态库命令。

    type Dysymtab

    type Dysymtab struct {
        LoadBytes
        DysymtabCmd
        IndirectSyms []uint32 // indices into Symtab.Syms
    }
    

    Dysymtab代表Mach-O动态符号表命令。

    type DysymtabCmd

    type DysymtabCmd struct {
        Cmd            LoadCmd
        Len            uint32
        Ilocalsym      uint32
        Nlocalsym      uint32
        Iextdefsym     uint32
        Nextdefsym     uint32
        Iundefsym      uint32
        Nundefsym      uint32
        Tocoffset      uint32
        Ntoc           uint32
        Modtaboff      uint32
        Nmodtab        uint32
        Extrefsymoff   uint32
        Nextrefsyms    uint32
        Indirectsymoff uint32
        Nindirectsyms  uint32
        Extreloff      uint32
        Nextrel        uint32
        Locreloff      uint32
        Nlocrel        uint32
    }
    

    DysymtabCmd是Mach-O动态符号表命令。

    type FatArch

    type FatArch struct {
        FatArchHeader
        *File
    }
    

    FatArch是FatFile中的Mach-O文件。

    type FatArchHeader

    type FatArchHeader struct {
        Cpu    Cpu
        SubCpu uint32
        Offset uint32
        Size   uint32
        Align  uint32
    }
    

    FatArchHeader代表特定图像体系结构的胖标头。

    type FatFile

    type FatFile struct {
        Magic  uint32
        Arches []FatArch
        // contains filtered or unexported fields
    }
    

    FatFile是Mach-O通用二进制文件,至少包含一个体系结构。

    func NewFatFile

    func NewFatFile(r io.ReaderAt) (*FatFile, error)
    

    NewFatFile创建一个新的FatFile,用于访问通用二进制文件中的所有Mach-O图像。 Mach-O二进制文件应从ReaderAt的位置0开始。

    func OpenFat

    func OpenFat(name string) (*FatFile, error)
    

    OpenFat使用os.Open打开命名文件,并准备将其用作Mach-O通用二进制文件。

    func (*FatFile) Close

    func (ff *FatFile) Close() error
    

    type File

    type File struct {
        FileHeader
        ByteOrder binary.ByteOrder
        Loads     []Load
        Sections  []*Section
    
        Symtab   *Symtab
        Dysymtab *Dysymtab
        // contains filtered or unexported fields
    }
    

    文件代表打开的Mach-O文件。

    func NewFile

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

    NewFile创建一个新文件,用于在基础阅读器中访问Mach-O二进制文件。 Mach-O二进制文件应从ReaderAt的位置0开始。

    func Open

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

    Open使用os.Open打开命名的文件,并准备将其用作Mach-O二进制文件。

    func (*File) Close

    func (f *File) Close() error
    

    关闭关闭文件。 如果文件是使用NewFile而不是直接使用Open创建的,则Close无效。

    func (*File) DWARF

    func (f *File) DWARF() (*dwarf.Data, error)
    

    DWARF返回Mach-O文件的DWARF调试信息。

    func (*File) ImportedLibraries

    func (f *File) ImportedLibraries() ([]string, error)
    

    ImportedLibraries返回由二进制f引用的所有库的路径,这些路径预计将在动态链接时与二进制链接。

    func (*File) ImportedSymbols

    func (f *File) ImportedSymbols() ([]string, error)
    

    ImportedSymbols返回二进制f引用的所有符号的名称,这些符号期望在动态加载时由其他库满足。

    func (*File) Section

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

    Section返回具有给定名称的第一部分;如果不存在这样的部分,则返回nil。

    func (*File) Segment

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

    Segment返回具有给定名称的第一个Segment,如果不存在这样的细分,则返回nil。

    type FileHeader

    type FileHeader struct {
        Magic  uint32
        Cpu    Cpu
        SubCpu uint32
        Type   Type
        Ncmd   uint32
        Cmdsz  uint32
        Flags  uint32
    }
    

    FileHeader代表Mach-O文件头。

    type FormatError

    type FormatError struct {
        off int64
        msg string
        val interface{}
    }
    

    如果数据的目标文件格式不正确,则某些操作将返回FormatError。

    func (*FormatError) Error

    func (e *FormatError) Error() string
    

    type Load

    type Load interface {
        Raw() []byte
    }
    

    负载代表任何Mach-O负载命令。

    type LoadBytes

    type LoadBytes []byte
    

    LoadBytes是Mach-O加载命令的未解释字节。

    func (LoadBytes) Raw

    func (b LoadBytes) Raw() []byte
    

    type LoadCmd

    type LoadCmd uint32
    

    LoadCmd是Mach-O加载命令。

    const (
        LoadCmdSegment    LoadCmd = 1
        LoadCmdSymtab     LoadCmd = 2
        LoadCmdThread     LoadCmd = 4
        LoadCmdUnixThread LoadCmd = 5 // thread+stack
        LoadCmdDysymtab   LoadCmd = 11
        LoadCmdDylib      LoadCmd = 12
        LoadCmdDylinker   LoadCmd = 15
        LoadCmdSegment64  LoadCmd = 25
    )
    

    func (LoadCmd) GoString

    func (i LoadCmd) GoString() string
    

    func (LoadCmd) String

    func (i LoadCmd) String() string
    

    type Nlist32

    type Nlist32 struct {
        Name  uint32
        Type  uint8
        Sect  uint8
        Desc  uint16
        Value uint32
    }
    

    Nlist32是一个Mach-O 32位符号表入口。

    type Nlist64

    type Nlist64 struct {
        Name  uint32
        Type  uint8
        Sect  uint8
        Desc  uint16
        Value uint64
    }
    

    Nlist64是一个Mach-O 64位符号表入口。

    type Regs386

    type Regs386 struct {
        AX    uint32
        BX    uint32
        CX    uint32
        DX    uint32
        DI    uint32
        SI    uint32
        BP    uint32
        SP    uint32
        SS    uint32
        FLAGS uint32
        IP    uint32
        CS    uint32
        DS    uint32
        ES    uint32
        FS    uint32
        GS    uint32
    }
    

    Regs386是Mach-O 386寄存器结构。

    type RegsAMD64

    type RegsAMD64 struct {
        AX    uint64
        BX    uint64
        CX    uint64
        DX    uint64
        DI    uint64
        SI    uint64
        BP    uint64
        SP    uint64
        R8    uint64
        R9    uint64
        R10   uint64
        R11   uint64
        R12   uint64
        R13   uint64
        R14   uint64
        R15   uint64
        IP    uint64
        FLAGS uint64
        CS    uint64
        FS    uint64
        GS    uint64
    }
    

    RegsAMD64是Mach-O AMD64寄存器结构。

    type Section

    type Section struct {
        SectionHeader
    
        // 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.
        io.ReaderAt
        // contains filtered or unexported fields
    }
    

    func (*Section) Data

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

    数据读取并返回Mach-O部分的内容。

    func (*Section) Open

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

    打开将返回一个新的ReadSeeker,其中将读取Mach-O部分。

    type Section32

    type Section32 struct {
        Name     [16]byte
        Seg      [16]byte
        Addr     uint32
        Size     uint32
        Offset   uint32
        Align    uint32
        Reloff   uint32
        Nreloc   uint32
        Flags    uint32
        Reserve1 uint32
        Reserve2 uint32
    }
    

    Section32是32位Mach-O节头。

    type Section64

    type Section64 struct {
        Name     [16]byte
        Seg      [16]byte
        Addr     uint64
        Size     uint64
        Offset   uint32
        Align    uint32
        Reloff   uint32
        Nreloc   uint32
        Flags    uint32
        Reserve1 uint32
        Reserve2 uint32
        Reserve3 uint32
    }
    

    Section64是64位Mach-O节头。

    type SectionHeader

    type SectionHeader struct {
        Name   string
        Seg    string
        Addr   uint64
        Size   uint64
        Offset uint32
        Align  uint32
        Reloff uint32
        Nreloc uint32
        Flags  uint32
    }
    

    type Segment

    type Segment struct {
        LoadBytes
        SegmentHeader
    
        // 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.
        io.ReaderAt
        // contains filtered or unexported fields
    }
    

    Segment代表Mach-O 32位或64位负载段命令。

    func (*Segment) Data

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

    数据读取并返回该段的内容。

    func (*Segment) Open

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

    Open返回一个新的ReadSeeker来读取该段。

    type Segment32

    type Segment32 struct {
        Cmd     LoadCmd
        Len     uint32
        Name    [16]byte
        Addr    uint32
        Memsz   uint32
        Offset  uint32
        Filesz  uint32
        Maxprot uint32
        Prot    uint32
        Nsect   uint32
        Flag    uint32
    }
    

    Segment32是32位Mach-O段加载命令。

    type Segment64

    type Segment64 struct {
        Cmd     LoadCmd
        Len     uint32
        Name    [16]byte
        Addr    uint64
        Memsz   uint64
        Offset  uint64
        Filesz  uint64
        Maxprot uint32
        Prot    uint32
        Nsect   uint32
        Flag    uint32
    }
    

    Segment64是64位Mach-O段加载命令。

    type SegmentHeader

    type SegmentHeader struct {
        Cmd     LoadCmd
        Len     uint32
        Name    string
        Addr    uint64
        Memsz   uint64
        Offset  uint64
        Filesz  uint64
        Maxprot uint32
        Prot    uint32
        Nsect   uint32
        Flag    uint32
    }
    

    SegmentHeader是Mach-O 32位或64位装入段命令的标头。

    type Symbol

    type Symbol struct {
        Name  string
        Type  uint8
        Sect  uint8
        Desc  uint16
        Value uint64
    }
    

    Symbol是Mach-O的32位或64位符号表入口。

    type Symtab

    type Symtab struct {
        LoadBytes
        SymtabCmd
        Syms []Symbol
    }
    

    Symtab代表Mach-O符号表命令。

    type SymtabCmd

    type SymtabCmd struct {
        Cmd     LoadCmd
        Len     uint32
        Symoff  uint32
        Nsyms   uint32
        Stroff  uint32
        Strsize uint32
    }
    

    SymtabCmd是Mach-O符号表命令。

    type Thread

    type Thread struct {
        Cmd  LoadCmd
        Len  uint32
        Type uint32
        Data []uint32
    }
    

    线程是Mach-O线程状态命令。

    type Type

    type Type uint32
    

    类型是Mach-O文件类型,例如 目标文件,可执行文件或动态库。

    const (
        TypeObj    Type = 1
        TypeExec   Type = 2
        TypeDylib  Type = 6
        TypeBundle Type = 8
    )
    

    相关文章

      网友评论

          本文标题:Golang标准库——debug/macho

          本文链接:https://www.haomeiwen.com/subject/zpoquktx.html