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"
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.



649
650
651
652
653
654
655
656
657
658
659
660
# File 'lib/macho/headers.rb', line 649

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



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

def cpusubtype
  @cpusubtype
end

#cputypeInteger (readonly)

Returns the CPU type of the Mach-O.

Returns:

  • (Integer)

    the CPU type of the Mach-O



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

def cputype
  @cputype
end

#filetypeInteger (readonly)

Returns the file type of the Mach-O.

Returns:

  • (Integer)

    the file type of the Mach-O



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

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



638
639
640
# File 'lib/macho/headers.rb', line 638

def flags
  @flags
end

#magicInteger (readonly)

Returns the magic number.

Returns:

  • (Integer)

    the magic number



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

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



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

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



635
636
637
# File 'lib/macho/headers.rb', line 635

def sizeofcmds
  @sizeofcmds
end

Instance Method Details

#alignmentInteger

Returns the file's internal alignment.

Returns:

  • (Integer)

    the file's internal alignment



735
736
737
# File 'lib/macho/headers.rb', line 735

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



710
711
712
# File 'lib/macho/headers.rb', line 710

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



690
691
692
# File 'lib/macho/headers.rb', line 690

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



715
716
717
# File 'lib/macho/headers.rb', line 715

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



700
701
702
# File 'lib/macho/headers.rb', line 700

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



705
706
707
# File 'lib/macho/headers.rb', line 705

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



680
681
682
# File 'lib/macho/headers.rb', line 680

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



666
667
668
669
670
671
672
# File 'lib/macho/headers.rb', line 666

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



685
686
687
# File 'lib/macho/headers.rb', line 685

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



720
721
722
# File 'lib/macho/headers.rb', line 720

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



725
726
727
# File 'lib/macho/headers.rb', line 725

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



730
731
732
# File 'lib/macho/headers.rb', line 730

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



675
676
677
# File 'lib/macho/headers.rb', line 675

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



695
696
697
# File 'lib/macho/headers.rb', line 695

def preload?
  filetype == Headers::MH_PRELOAD
end

#to_hHash

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

Returns:



740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
# File 'lib/macho/headers.rb', line 740

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