Class: MachO::LoadCommands::LoadCommand
- Inherits:
-
MachOStructure
- Object
- MachOStructure
- MachO::LoadCommands::LoadCommand
- Defined in:
- lib/macho/load_commands.rb
Overview
The top-level Mach-O load command structure.
This is the most generic load command -- only the type ID and size are represented. Used when a more specific class isn't available or isn't implemented.
Direct Known Subclasses
BuildVersionCommand, DyldInfoCommand, DylibCommand, DylinkerCommand, DysymtabCommand, EncryptionInfoCommand, EntryPointCommand, FilesetEntryCommand, FvmfileCommand, FvmlibCommand, IdentCommand, LinkeditDataCommand, LinkerOptionCommand, NoteCommand, PrebindCksumCommand, PreboundDylibCommand, RoutinesCommand, RpathCommand, SegmentCommand, SourceVersionCommand, SubClientCommand, SubFrameworkCommand, SubLibraryCommand, SubUmbrellaCommand, SymsegCommand, SymtabCommand, ThreadCommand, TwolevelHintsCommand, UUIDCommand, VersionMinCommand
Defined Under Namespace
Classes: LCStr, SerializationContext
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=2"- 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.
8
Instance Attribute Summary collapse
-
#cmd ⇒ Integer
readonly
The load command's type ID.
-
#cmdsize ⇒ Integer
readonly
The size of the load command, in bytes.
-
#view ⇒ MachO::MachOView?
readonly
The raw view associated with the load command, or nil if the load command was created via LoadCommand.create.
Class Method Summary collapse
-
.create(cmd_sym, *args) ⇒ Object
Creates a new (viewless) command corresponding to the symbol provided.
-
.new_from_bin(view) ⇒ LoadCommand
private
Instantiates a new LoadCommand given a view into its origin Mach-O.
Instance Method Summary collapse
-
#initialize(view, cmd, cmdsize) ⇒ LoadCommand
constructor
private
A new instance of LoadCommand.
-
#offset ⇒ Integer
deprecated
Deprecated.
use #view instead
-
#serializable? ⇒ Boolean
Whether the load command can be serialized.
-
#serialize(context) ⇒ String?
private
The serialized fields of the load command, or nil if the load command can't be serialized.
-
#to_h ⇒ Hash
A hash representation of this load command.
-
#to_s ⇒ String
A string representation of the load command's identifying number.
-
#type ⇒ Symbol?
(also: #to_sym)
A symbol representation of the load command's type ID, or nil if the ID doesn't correspond to a known load command class.
Methods inherited from MachOStructure
Constructor Details
#initialize(view, cmd, cmdsize) ⇒ LoadCommand
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 LoadCommand.
236 237 238 239 240 241 |
# File 'lib/macho/load_commands.rb', line 236 def initialize(view, cmd, cmdsize) super() @view = view @cmd = cmd @cmdsize = cmdsize end |
Instance Attribute Details
#cmd ⇒ Integer (readonly)
Returns the load command's type ID.
191 192 193 |
# File 'lib/macho/load_commands.rb', line 191 def cmd @cmd end |
#cmdsize ⇒ Integer (readonly)
Returns the size of the load command, in bytes.
194 195 196 |
# File 'lib/macho/load_commands.rb', line 194 def cmdsize @cmdsize end |
#view ⇒ MachO::MachOView? (readonly)
Returns the raw view associated with the load command, or nil if the load command was created via create.
188 189 190 |
# File 'lib/macho/load_commands.rb', line 188 def view @view end |
Class Method Details
.create(cmd_sym, *args) ⇒ Object
Creates a new (viewless) command corresponding to the symbol provided
218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/macho/load_commands.rb', line 218 def self.create(cmd_sym, *args) raise LoadCommandNotCreatableError, cmd_sym unless CREATABLE_LOAD_COMMANDS.include?(cmd_sym) klass = LoadCommands.const_get LC_STRUCTURES[cmd_sym] cmd = LOAD_COMMAND_CONSTANTS[cmd_sym] # cmd will be filled in, view and cmdsize will be left unpopulated klass_arity = klass.instance_method(:initialize).arity - 3 raise LoadCommandCreationArityError.new(cmd_sym, klass_arity, args.size) if klass_arity != args.size klass.new(nil, cmd, nil, *args) end |
.new_from_bin(view) ⇒ LoadCommand
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.
Instantiates a new LoadCommand given a view into its origin Mach-O
208 209 210 211 212 213 |
# File 'lib/macho/load_commands.rb', line 208 def self.new_from_bin(view) bin = view.raw_data.slice(view.offset, bytesize) format = Utils.specialize_format(self::FORMAT, view.endianness) new(view, *bin.unpack(format)) end |
Instance Method Details
#offset ⇒ Integer
use #view instead
Returns the load command's offset in the source file.
262 263 264 |
# File 'lib/macho/load_commands.rb', line 262 def offset view.offset end |
#serializable? ⇒ Boolean
Returns whether the load command can be serialized.
244 245 246 |
# File 'lib/macho/load_commands.rb', line 244 def serializable? CREATABLE_LOAD_COMMANDS.include?(LOAD_COMMANDS[cmd]) end |
#serialize(context) ⇒ String?
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 the serialized fields of the load command, or nil if the load command can't be serialized.
253 254 255 256 257 258 |
# File 'lib/macho/load_commands.rb', line 253 def serialize(context) raise LoadCommandNotSerializableError, LOAD_COMMANDS[cmd] unless serializable? format = Utils.specialize_format(FORMAT, context.endianness) [cmd, SIZEOF].pack(format) end |
#to_h ⇒ Hash
Children should override this to include additional information.
Returns a hash representation of this load command.
282 283 284 285 286 287 288 289 |
# File 'lib/macho/load_commands.rb', line 282 def to_h { "view" => view.to_h, "cmd" => cmd, "cmdsize" => cmdsize, "type" => type, }.merge super end |
#to_s ⇒ String
Returns a string representation of the load command's identifying number.
276 277 278 |
# File 'lib/macho/load_commands.rb', line 276 def to_s type.to_s end |
#type ⇒ Symbol? Also known as: to_sym
Returns a symbol representation of the load command's type ID, or nil if the ID doesn't correspond to a known load command class.
268 269 270 |
# File 'lib/macho/load_commands.rb', line 268 def type LOAD_COMMANDS[cmd] end |