Class: MachO::Headers::MachHeader

Inherits:
MachOStructure show all
Defined in:
lib/macho/headers.rb

Overview

32-bit Mach-O file header structure

Direct Known Subclasses

MachHeader64

Constant Summary collapse

FORMAT =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

"L=7".freeze
SIZEOF =

This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.

28

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from MachOStructure

bytesize, new_from_bin

Constructor Details

#initialize(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds, flags) ⇒ MachHeader

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of MachHeader.



642
643
644
645
646
647
648
649
650
651
652
653
# File 'lib/macho/headers.rb', line 642

def initialize(magic, cputype, cpusubtype, filetype, ncmds, sizeofcmds,
               flags)
  @magic = magic
  @cputype = cputype
  # For now we're not interested in additional capability bits also to be
  # found in the `cpusubtype` field. We only care about the CPU sub-type.
  @cpusubtype = cpusubtype & ~CPU_SUBTYPE_MASK
  @filetype = filetype
  @ncmds = ncmds
  @sizeofcmds = sizeofcmds
  @flags = flags
end

Instance Attribute Details

#cpusubtypeInteger (readonly)

Returns the CPU subtype of the Mach-O.

Returns:

  • (Integer)

    the CPU subtype of the Mach-O



619
620
621
# File 'lib/macho/headers.rb', line 619

def cpusubtype
  @cpusubtype
end

#cputypeInteger (readonly)

Returns the CPU type of the Mach-O.

Returns:

  • (Integer)

    the CPU type of the Mach-O



616
617
618
# File 'lib/macho/headers.rb', line 616

def cputype
  @cputype
end

#filetypeInteger (readonly)

Returns the file type of the Mach-O.

Returns:

  • (Integer)

    the file type of the Mach-O



622
623
624
# File 'lib/macho/headers.rb', line 622

def filetype
  @filetype
end

#flagsInteger (readonly)

Returns the header flags associated with the Mach-O.

Returns:

  • (Integer)

    the header flags associated with the Mach-O



631
632
633
# File 'lib/macho/headers.rb', line 631

def flags
  @flags
end

#magicInteger (readonly)

Returns the magic number.

Returns:

  • (Integer)

    the magic number



613
614
615
# File 'lib/macho/headers.rb', line 613

def magic
  @magic
end

#ncmdsInteger (readonly)

Returns the number of load commands in the Mach-O.

Returns:

  • (Integer)

    the number of load commands in the Mach-O



625
626
627
# File 'lib/macho/headers.rb', line 625

def ncmds
  @ncmds
end

#sizeofcmdsInteger (readonly)

Returns the size of all load commands, in bytes, in the Mach-O.

Returns:

  • (Integer)

    the size of all load commands, in bytes, in the Mach-O



628
629
630
# File 'lib/macho/headers.rb', line 628

def sizeofcmds
  @sizeofcmds
end

Instance Method Details

#alignmentInteger

Returns the file's internal alignment.

Returns:

  • (Integer)

    the file's internal alignment



728
729
730
# File 'lib/macho/headers.rb', line 728

def alignment
  magic32? ? 4 : 8
end

#bundle?Boolean

Returns whether or not the file is of type MH_BUNDLE.

Returns:

  • (Boolean)

    whether or not the file is of type MH_BUNDLE



703
704
705
# File 'lib/macho/headers.rb', line 703

def bundle?
  filetype == Headers::MH_BUNDLE
end

#core?Boolean

Returns whether or not the file is of type MH_CORE.

Returns:

  • (Boolean)

    whether or not the file is of type MH_CORE



683
684
685
# File 'lib/macho/headers.rb', line 683

def core?
  filetype == Headers::MH_CORE
end

#dsym?Boolean

Returns whether or not the file is of type MH_DSYM.

Returns:

  • (Boolean)

    whether or not the file is of type MH_DSYM



708
709
710
# File 'lib/macho/headers.rb', line 708

def dsym?
  filetype == Headers::MH_DSYM
end

#dylib?Boolean

Returns whether or not the file is of type MH_DYLIB.

Returns:

  • (Boolean)

    whether or not the file is of type MH_DYLIB



693
694
695
# File 'lib/macho/headers.rb', line 693

def dylib?
  filetype == Headers::MH_DYLIB
end

#dylinker?Boolean

Returns whether or not the file is of type MH_DYLINKER.

Returns:

  • (Boolean)

    whether or not the file is of type MH_DYLINKER



698
699
700
# File 'lib/macho/headers.rb', line 698

def dylinker?
  filetype == Headers::MH_DYLINKER
end

#executable?Boolean

Returns whether or not the file is of type MH_EXECUTE.

Returns:

  • (Boolean)

    whether or not the file is of type MH_EXECUTE



673
674
675
# File 'lib/macho/headers.rb', line 673

def executable?
  filetype == Headers::MH_EXECUTE
end

#flag?(flag) ⇒ Boolean

Returns true if flag is present in the header's flag section.

Examples:

puts "this mach-o has position-independent execution" if header.flag?(:MH_PIE)

Parameters:

  • flag (Symbol)

    a mach header flag symbol

Returns:

  • (Boolean)

    true if flag is present in the header's flag section



659
660
661
662
663
664
665
# File 'lib/macho/headers.rb', line 659

def flag?(flag)
  flag = MH_FLAGS[flag]

  return false if flag.nil?

  flags & flag == flag
end

#fvmlib?Boolean

Returns whether or not the file is of type MH_FVMLIB.

Returns:

  • (Boolean)

    whether or not the file is of type MH_FVMLIB



678
679
680
# File 'lib/macho/headers.rb', line 678

def fvmlib?
  filetype == Headers::MH_FVMLIB
end

#kext?Boolean

Returns whether or not the file is of type MH_KEXT_BUNDLE.

Returns:

  • (Boolean)

    whether or not the file is of type MH_KEXT_BUNDLE



713
714
715
# File 'lib/macho/headers.rb', line 713

def kext?
  filetype == Headers::MH_KEXT_BUNDLE
end

#magic32?Boolean

Returns true if the Mach-O has 32-bit magic, false otherwise.

Returns:

  • (Boolean)

    true if the Mach-O has 32-bit magic, false otherwise



718
719
720
# File 'lib/macho/headers.rb', line 718

def magic32?
  Utils.magic32?(magic)
end

#magic64?Boolean

Returns true if the Mach-O has 64-bit magic, false otherwise.

Returns:

  • (Boolean)

    true if the Mach-O has 64-bit magic, false otherwise



723
724
725
# File 'lib/macho/headers.rb', line 723

def magic64?
  Utils.magic64?(magic)
end

#object?Boolean

Returns whether or not the file is of type MH_OBJECT.

Returns:

  • (Boolean)

    whether or not the file is of type MH_OBJECT



668
669
670
# File 'lib/macho/headers.rb', line 668

def object?
  filetype == Headers::MH_OBJECT
end

#preload?Boolean

Returns whether or not the file is of type MH_PRELOAD.

Returns:

  • (Boolean)

    whether or not the file is of type MH_PRELOAD



688
689
690
# File 'lib/macho/headers.rb', line 688

def preload?
  filetype == Headers::MH_PRELOAD
end

#to_hHash

Returns a hash representation of this MachO::Headers::MachHeader.

Returns:



733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
# File 'lib/macho/headers.rb', line 733

def to_h
  {
    "magic" => magic,
    "magic_sym" => MH_MAGICS[magic],
    "cputype" => cputype,
    "cputype_sym" => CPU_TYPES[cputype],
    "cpusubtype" => cpusubtype,
    "cpusubtype_sym" => CPU_SUBTYPES[cputype][cpusubtype],
    "filetype" => filetype,
    "filetype_sym" => MH_FILETYPES[filetype],
    "ncmds" => ncmds,
    "sizeofcmds" => sizeofcmds,
    "flags" => flags,
    "alignment" => alignment,
  }.merge super
end