Class: Indis::MachO::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/indis-macho/command.rb

Direct Known Subclasses

ARMUnixThreadCommand, CodeSignatureCommand, DySymTabCommand, DyldInfoOnlyCommand, DylibCommand, EncryptionInfoCommand, FunctionStartsCommand, LinkEditCommand, LoadDyLibCommand, LoadDyLinkerCommand, SectionSubCommand, SegmentCommand, SymTabCommand, UUIDCommand, VersionMinIPhoneOSCommand

Constant Summary

LC_REQ_DYLD =
0x80000000
CMD =
{
  0x1 => :LC_SEGMENT,
  0x2 => :LC_SYMTAB,
  0x3 => :LC_SYMSEG,
  0x4 => :LC_THREAD,
  0x5 => :LC_UNIXTHREAD,
  0x6 => :LC_LOADFVMLIB,
  0x7 => :LC_IDFVMLIB,
  0x8 => :LC_IDENT,
  0x9 => :LC_FVMFILE,
  0xa => :LC_PREPAGE,
  0xb => :LC_DYSYMTAB,
  0xc => :LC_LOAD_DYLIB,
  0xd => :LC_ID_DYLIB,
  0xe => :LC_LOAD_DYLINKER,
  0xf => :LC_ID_DYLINKER,
  0x10 => :LC_PREBOUND_DYLIB,
  0x11 => :LC_ROUTINES,
  0x12 => :LC_SUB_FRAMEWORK,
  0x13 => :LC_SUB_UMBRELLA,
  0x14 => :LC_SUB_CLIENT,
  0x15 => :LC_SUB_LIBRARY,
  0x16 => :LC_TWOLEVEL_HINTS,
  0x17 => :LC_PREBIND_CKSUM,
  
  0x18 | LC_REQ_DYLD => :LC_LOAD_WEAK_DYLIB,
  0x19 => :LC_SEGMENT_64,
  0x1a => :LC_ROUTINES_64,
  0x1b => :LC_UUID,
  0x1c | LC_REQ_DYLD => :LC_RPATH,
  0x1d => :LC_CODE_SIGNATURE,
  0x1e => :LC_SEGMENT_SPLIT_INFO,
  0x1f | LC_REQ_DYLD => :LC_REEXPORT_DYLIB,
  0x20 => :LC_LAZY_LOAD_DYLIB,
  0x21 => :LC_ENCRYPTION_INFO,
  0x22 => :LC_DYLD_INFO,
  0x22|LC_REQ_DYLD => :LC_DYLD_INFO_ONLY,
  
  0x23 | LC_REQ_DYLD => :LC_LOAD_UPWARD_DYLIB,
  0x24 => :LC_VERSION_MIN_MACOSX,
  0x25 => :LC_VERSION_MIN_IPHONEOS,
  0x26 => :LC_FUNCTION_STARTS,
  0x27 => :LC_DYLD_ENVIRONMENT,
}
CMD_CLASS =
{
  LC_SEGMENT: :SegmentCommand,
  LC_DYLD_INFO_ONLY: :DyldInfoOnlyCommand,
  LC_SYMTAB: :SymTabCommand,
  LC_DYSYMTAB: :DySymTabCommand,
  LC_LOAD_DYLINKER: :LoadDyLinkerCommand,
  LC_UUID: :UUIDCommand,
  LC_UNIXTHREAD: :ARMUnixThreadCommand,
  LC_ENCRYPTION_INFO: :EncryptionInfoCommand,
  LC_LOAD_DYLIB: :LoadDyLibCommand,
  LC_CODE_SIGNATURE: :CodeSignatureCommand,
  LC_VERSION_MIN_IPHONEOS: :VersionMinIPhoneOSCommand,
  LC_FUNCTION_STARTS: :FunctionStartsCommand,
  LC_ID_DYLIB: :DylibCommand,
  LC_SEGMENT_SPLIT_INFO: :LinkEditCommand,
}

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Command) initialize(cmd, length, payload)

Returns a new instance of Command



94
95
96
97
98
99
100
# File 'lib/indis-macho/command.rb', line 94

def initialize(cmd, length, payload)
  @cmd = CMD[cmd]
  @length = length
  raise "Unknown mach-o command" unless @cmd
    
  process(payload)
end

Instance Attribute Details

- (Object) cmd (readonly)

Returns the value of attribute cmd



92
93
94
# File 'lib/indis-macho/command.rb', line 92

def cmd
  @cmd
end

- (Object) length (readonly)

Returns the value of attribute length



92
93
94
# File 'lib/indis-macho/command.rb', line 92

def length
  @length
end

Class Method Details

+ (Object) class_of_command(c)



102
103
104
105
106
107
108
# File 'lib/indis-macho/command.rb', line 102

def self.class_of_command(c)
  cmd = CMD[c]
  raise UnknownCommandError, "Unknown mach-o command #{c.to_s(16)}" unless cmd
  clsnm = CMD_CLASS[cmd]
  raise "Unsupported mach-o command #{c.to_s(16)} (#{cmd})" unless clsnm
  cls = Indis::MachO.const_get(clsnm)
end