Package ghidra.app.cmd.disassemble

# Class X86_64DisassembleCommand

java.lang.Object
ghidra.framework.cmd.BackgroundCommand<Program>
ghidra.app.cmd.disassemble.DisassembleCommand
ghidra.app.cmd.disassemble.X86_64DisassembleCommand

All Implemented Interfaces:
  `Command<Program>`

public class X86_64DisassembleCommand extends DisassembleCommand
Command object for performing 64-/32-bit x86 disassembly

This generally only comes up when debugging, since there can be multiple images loaded by an x86-64 target. For WoW64, the images may be mixed. Thus, this command allows you to disassemble 64-bit or 32-bit instructions whenever the language is set to 64-bit x86.

WARNING: If used in static programs, i.e., not debug traces, there are some potential remaining issues, particularly dealing with stored context and follow-on disassembly -- typically called for by the analyzers. In most cases, this does not matter, since mixed 64- and 32-bit code in a single image is likely a niche case and can be handled via careful commands from the user. Nevertheless, TODO: Rework x86-64 analyzers to call the correct mode of disassembly.

- ## Field Summary

  ### Fields inherited from class ghidra.app.cmd.disassemble.DisassembleCommand

  `disassemblyPerformed, languageError, nonExecutableStart, startSet, unalignedStart, useDefaultRepeatPatternBehavior`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `X86_64DisassembleCommand(Address start, AddressSetView restrictedSet, boolean size32Mode)`
  Constructor for X86_64DisassembleCommand.
  `X86_64DisassembleCommand(AddressSetView startSet, AddressSetView restrictedSet, boolean size32Mode)`
  Constructor for X86_64DisassembleCommand.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static AddressSet`
  `alignSet(int alignment, AddressSetView set)`
  `boolean`
  `applyTo(Program program, TaskMonitor monitor)`
  Method called when this command is to apply changes to the given domain object.
  `String`
  `getName()`
  Returns the name of this command.
  `void`
  `setInitialContext(RegisterValue initialContextValue)`
  Allows a specified initial context to be used at all start points.
  `void`
  `setSeedContext(DisassemblerContextImpl seedContext)`
  Allows the disassembler context to be seeded for the various disassembly start points which may be encountered using the future flow state of the specified seedContext.

  ### Methods inherited from class ghidra.app.cmd.disassemble.DisassembleCommand

  `doDisassembly, doDisassemblySeeds, enableCodeAnalysis, getDisassembledAddressSet, getStatusMsg`

  ### Methods inherited from class ghidra.framework.cmd.BackgroundCommand

  `applyTo, canCancel, dispose, hasProgress, isModal, run, setStatusMsg, taskCompleted, toString`

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

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

- ## Constructor Details

  - ### X86_64DisassembleCommand

    public X86_64DisassembleCommand(AddressSetView startSet, AddressSetView restrictedSet, boolean size32Mode)
    Constructor for X86_64DisassembleCommand.
    Parameters:
      `startSet` - set of addresses to be the start of disassembly. The Command object will attempt to start a disassembly at each address in this set.
      `restrictedSet` - addresses that can be disassembled. a null set implies no restrictions.
      `size32Mode` - pass true if disassembling in 32-bit compatibility mode, otherwise normal 64-bit disassembly will be performed.

  - ### X86_64DisassembleCommand

    public X86_64DisassembleCommand(Address start, AddressSetView restrictedSet, boolean size32Mode)
    Constructor for X86_64DisassembleCommand.
    Parameters:
      `start` - address to be the start of a disassembly.
      `restrictedSet` - addresses that can be disassembled. a null set implies no restrictions.
      `size32Mode` - pass true if disassembling in 32-bit compatibility mode, otherwise normal 64-bit disassembly will be performed.

- ## Method Details

  - ### getName

    public String getName()
    Description copied from interface: `Command`
    Returns the name of this command.
    Specified by:
      `getName` in interface `Command<Program>`
    Overrides:
      `getName` in class `BackgroundCommand<Program>`
    Returns:
      the name of this command

  - ### setSeedContext

    public void setSeedContext(DisassemblerContextImpl seedContext)
    Description copied from class: `DisassembleCommand`
    Allows the disassembler context to be seeded for the various disassembly start points which may be encountered using the future flow state of the specified seedContext. Any initial context set via the `DisassembleCommand.setInitialContext(RegisterValue)` method will take precedence when combined with any seed values. The seedContext should remain unchanged while disassembler command is actively running.
    Overrides:
      `setSeedContext` in class `DisassembleCommand`
    Parameters:
      `seedContext` - seed context or null

  - ### setInitialContext

    public void setInitialContext(RegisterValue initialContextValue)
    Description copied from class: `DisassembleCommand`
    Allows a specified initial context to be used at all start points. This value will take precedence when combined with any individual seed context values specified by the `DisassembleCommand.setSeedContext(DisassemblerContextImpl)` method. The defaultSeedContext should remain unchanged while disassembler command is actively running.
    Overrides:
      `setInitialContext` in class `DisassembleCommand`
    Parameters:
      `initialContextValue` - the initial context value to set or null to clear it

  - ### alignSet

    public static AddressSet alignSet(int alignment, AddressSetView set)

  - ### applyTo

    public boolean applyTo(Program program, TaskMonitor monitor)
    Description copied from class: `BackgroundCommand`
    Method called when this command is to apply changes to the given domain object. A monitor is provided to display status information about the command as it executes in the background.
    Overrides:
      `applyTo` in class `DisassembleCommand`
    Parameters:
      `program` - domain object that will be affected by the command
      `monitor` - monitor to show progress of the command
    Returns:
      true if the command applied successfully