Package ghidra.app.util.bin.format.macho.commands

# Class SymbolTableCommand

java.lang.Object
ghidra.app.util.bin.format.macho.commands.LoadCommand
ghidra.app.util.bin.format.macho.commands.SymbolTableCommand

All Implemented Interfaces:
  `StructConverter`

public class SymbolTableCommand extends LoadCommand
Represents a symtab_command structure

- ## Field Summary

  ### Fields inherited from interface ghidra.app.util.bin.StructConverter

  `ASCII, BYTE, DWORD, IBO32, IBO64, POINTER, QWORD, SLEB128, STRING, ULEB128, UTF16, UTF8, VOID, WORD`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SymbolTableCommand(BinaryReader loadCommandReader, BinaryReader dataReader, MachHeader header)`
  Creates and parses a new `SymbolTableCommand`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addSymbols(List<NList> list)`
  Adds the given `List` of `NList`s to this symbol/string table, and adjusts the affected symbol table load command fields appropriately
  `String`
  `getCommandName()`
  Gets the name of this load command
  `long`
  `getLinkerDataOffset()`
  Gets the file offset of this load command's "linker data".
  `long`
  `getLinkerDataSize()`
  Gets the file size of this load command's "linker data".
  `long`
  `getNumberOfSymbols()`
  An integer indicating the number of entries in the symbol table.
  `long`
  `getStringTableOffset()`
  An integer containing the byte offset from the start of the image to the location of the string table.
  `long`
  `getStringTableSize()`
  An integer indicating the size (in bytes) of the string table.
  `NList`
  `getSymbolAt(int index)`
  `long`
  `getSymbolOffset()`
  An integer containing the byte offset from the start of the file to the location of the symbol table entries.
  `List<NList>`
  `getSymbols()`
  `void`
  `markup(Program program, MachHeader header, String source, TaskMonitor monitor, MessageLog log)`
  Marks up this `LoadCommand` data with data structures and comments.
  `void`
  `markupRawBinary(MachHeader header, FlatProgramAPI api, Address baseAddress, ProgramModule parentModule, TaskMonitor monitor, MessageLog log)`
  Marks-up this `LoadCommand` with data structures and comments.
  `DataType`
  `toDataType()`
  Returns a structure datatype representing the contents of the implementor of this interface.

  ### Methods inherited from class ghidra.app.util.bin.format.macho.commands.LoadCommand

  `checkCount, createFragment, createPlateComment, fileOffsetToAddress, getCommandSize, getCommandType, getContextualName, getStartIndex, markupPlateComment, updateMonitor`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### SymbolTableCommand

    public SymbolTableCommand(BinaryReader loadCommandReader, BinaryReader dataReader, MachHeader header) throws IOException
    Creates and parses a new `SymbolTableCommand`
    Parameters:
      `loadCommandReader` - A `reader` that points to the start of the load command
      `dataReader` - A `reader` that can read the data that the load command references. Note that this might be in a different underlying provider.
      `header` - The `header` associated with this load command
    Throws:
      `IOException` - if an IO-related error occurs while parsing

- ## Method Details

  - ### getSymbolOffset

    public long getSymbolOffset()
    An integer containing the byte offset from the start of the file to the location of the symbol table entries. The symbol table is an array of nlist data structures.
    Returns:
      symbol table offset

  - ### getNumberOfSymbols

    public long getNumberOfSymbols()
    An integer indicating the number of entries in the symbol table.
    Returns:
      the number of entries in the symbol table

  - ### getStringTableOffset

    public long getStringTableOffset()
    An integer containing the byte offset from the start of the image to the location of the string table.
    Returns:
      string table offset

  - ### getStringTableSize

    public long getStringTableSize()
    An integer indicating the size (in bytes) of the string table.
    Returns:
      string table size in bytes

  - ### getSymbols

    public List<NList> getSymbols()

  - ### addSymbols

    public void addSymbols(List<NList> list)
    Adds the given `List` of `NList`s to this symbol/string table, and adjusts the affected symbol table load command fields appropriately
    Parameters:
      `list` - The `List` of `NList`s to add

  - ### getSymbolAt

    public NList getSymbolAt(int index)

  - ### toDataType

    public DataType toDataType() throws DuplicateNameException, IOException
    Description copied from interface: `StructConverter`
    Returns a structure datatype representing the contents of the implementor of this interface.

    For example, given:

         class A {
             int foo;
             double bar;
         }

    The return value should be a structure data type with two data type components; an INT and a DOUBLE. The structure should contain field names and, if possible, field comments.

    Returns:
      returns a structure datatype representing the implementor of this interface
    Throws:
      `DuplicateNameException` - when a datatype of the same name already exists
      `IOException` - if an IO-related error occurs
    See Also:
      - `StructureDataType`

  - ### getCommandName

    public String getCommandName()
    Description copied from class: `LoadCommand`
    Gets the name of this load command
    Specified by:
      `getCommandName` in class `LoadCommand`
    Returns:
      The name of this load command

  - ### getLinkerDataOffset

    public long getLinkerDataOffset()
    Description copied from class: `LoadCommand`
    Gets the file offset of this load command's "linker data". Not all load commands with data will have linker data. Linker data typically resides in the __LINKEDIT segment.
    Overrides:
      `getLinkerDataOffset` in class `LoadCommand`
    Returns:
      The file offset of this load command's "linker data", or 0 if it has no linker data

  - ### getLinkerDataSize

    public long getLinkerDataSize()
    Description copied from class: `LoadCommand`
    Gets the file size of this load command's "linker data". Not all load commands with data will have linker data. Linker data typically resides in the __LINKEDIT segment.
    Overrides:
      `getLinkerDataSize` in class `LoadCommand`
    Returns:
      The file size of this load command's "linker data", or 0 if it has no linker data

  - ### markup

    public void markup(Program program, MachHeader header, String source, TaskMonitor monitor, MessageLog log) throws CancelledException
    Description copied from class: `LoadCommand`
    Marks up this `LoadCommand` data with data structures and comments. Assumes the program was imported as a Mach-O.
    Overrides:
      `markup` in class `LoadCommand`
    Parameters:
      `program` - The `Program` to mark up
      `header` - The Mach-O header
      `source` - A name that represents where the header came from (could be null)
      `monitor` - A cancellable task monitor
      `log` - The log
    Throws:
      `CancelledException` - if the user cancelled the operation

  - ### markupRawBinary

    public void markupRawBinary(MachHeader header, FlatProgramAPI api, Address baseAddress, ProgramModule parentModule, TaskMonitor monitor, MessageLog log)
    Description copied from class: `LoadCommand`
    Marks-up this `LoadCommand` with data structures and comments. Assumes the program was imported as a Raw Binary.
    Overrides:
      `markupRawBinary` in class `LoadCommand`
    Parameters:
      `header` - The Mach-O header
      `api` - A `FlatProgramAPI`
      `baseAddress` - The base address of the program
      `parentModule` - The parent `module` to create fragments
      `monitor` - A cancellable task monitor
      `log` - The log
    See Also:
      - `MachoBinaryAnalysisCommand`