Package ghidra.app.plugin.assembler
Interface Assembler
-
- All Known Implementing Classes:
SleighAssembler
public interface AssemblerThe primary interface for performing assembly in Ghidra. Use theAssemblersclass to obtain a suitable implementation for a given program or language.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description InstructionBlockassemble(Address at, java.lang.String... listing)Assemble a sequence of instructions and place them at the given address.byte[]assembleLine(Address at, java.lang.String line)Assemble a line instruction at the given address.byte[]assembleLine(Address at, java.lang.String line, AssemblyPatternBlock ctx)Assemble a line instruction at the given address, assuming the given context.AssemblyPatternBlockgetContextAt(Address addr)Get the context at a given address If there is a program binding, this will extract the actual context at the given address.java.util.Collection<AssemblyParseResult>parseLine(java.lang.String line)Parse a line instruction.InstructionpatchProgram(byte[] insbytes, Address at)Place an instruction into the bound program.InstructionpatchProgram(AssemblyResolvedConstructor res, Address at)Place a resolved (and fully-masked) instruction into the bound program.AssemblyResolutionResultsresolveLine(Address at, java.lang.String line)Assemble a line instruction at the given address.AssemblyResolutionResultsresolveLine(Address at, java.lang.String line, AssemblyPatternBlock ctx)Assemble a line instruction at the given address, assuming the given context.AssemblyResolutionResultsresolveTree(AssemblyParseResult parse, Address at)Resolve a given parse tree at the given address.AssemblyResolutionResultsresolveTree(AssemblyParseResult parse, Address at, AssemblyPatternBlock ctx)Resolve a given parse tree at the given address, assuming the given context Each item in the returned collection is either a completely resolved instruction, or a semantic error.
-
-
-
Method Detail
-
assemble
InstructionBlock assemble(Address at, java.lang.String... listing) throws AssemblySyntaxException, AssemblySemanticException, MemoryAccessException, AddressOverflowException
Assemble a sequence of instructions and place them at the given address. This method is only valid if the assembler is bound to a program. An instance may optionally implement this method without a program binding. In that case, the returned instruction block will refer to pseudo instructions.- Parameters:
at- the location where the resulting instructions should be placedlisting- a new-line separated or array sequence of instructions- Returns:
- the block of resulting instructions
- Throws:
AssemblySyntaxException- a textual instruction is non well-formedAssemblySemanticException- a well-formed instruction cannot be assembledMemoryAccessException- there is an issue writing the result to program memoryAddressOverflowException- the resulting block is beyond the valid address range
-
assembleLine
byte[] assembleLine(Address at, java.lang.String line) throws AssemblySyntaxException, AssemblySemanticException
Assemble a line instruction at the given address. This method is valid with or without a bound program. Even if bound, the program is not modified; however, the appropriate context information is taken from the bound program. Without a program, the language's default context is taken at the given location.- Parameters:
at- the location of the start of the instructionline- the textual assembly code- Returns:
- the binary machine code, suitable for placement at the given address
- Throws:
AssemblySyntaxException- the textual instruction is not well-formedAssemblySemanticException- the the well-formed instruction cannot be assembled
-
assembleLine
byte[] assembleLine(Address at, java.lang.String line, AssemblyPatternBlock ctx) throws AssemblySemanticException, AssemblySyntaxException
Assemble a line instruction at the given address, assuming the given context. This method works likeassembleLine(Address, String)except that it allows you to override the assumed context at that location.- Parameters:
at- the location of the start of the instructionline- the textual assembly codectx- the context register value at the start of the instruction- Returns:
- the results of semantic resolution (from all parse results)
- Throws:
AssemblySyntaxException- the textual instruction is not well-formedAssemblySemanticException- the well-formed instruction cannot be assembled
-
parseLine
java.util.Collection<AssemblyParseResult> parseLine(java.lang.String line)
Parse a line instruction. Generally, you should just useassembleLine(Address, String), but if you'd like access to the parse trees outside of anAssemblySelector, then this may be an acceptable option. Most notably, this is an excellent way to obtain suggestions for auto-completion. Each item in the returned collection is either a complete parse tree, or a syntax error Because all parse paths are attempted, it's possible to get many mixed results. For example, The input line may be a valid instruction; however, there may be suggestions to continue the line toward another valid instruction.- Parameters:
line- the line (or partial line) to parse- Returns:
- the results of parsing
-
resolveTree
AssemblyResolutionResults resolveTree(AssemblyParseResult parse, Address at, AssemblyPatternBlock ctx)
Resolve a given parse tree at the given address, assuming the given context Each item in the returned collection is either a completely resolved instruction, or a semantic error. Because all resolutions are attempted, it's possible to get many mixed results. NOTE: The resolved instructions are given as masks and values. Where the mask does not cover, you can choose any value.- Parameters:
parse- a parse result giving a valid treeat- the location of the start of the instructionctx- the context register value at the start of the instruction- Returns:
- the results of semantic resolution
-
resolveTree
AssemblyResolutionResults resolveTree(AssemblyParseResult parse, Address at)
Resolve a given parse tree at the given address. Each item in the returned collection is either a completely resolved instruction, or a semantic error. Because all resolutions are attempted, it's possible to get many mixed results. NOTE: The resolved instructions are given as masks and values. Where the mask does not cover, you can choose any value.- Parameters:
parse- a parse result giving a valid treeat- the location of the start of the instruction- Returns:
- the results of semantic resolution
-
resolveLine
AssemblyResolutionResults resolveLine(Address at, java.lang.String line) throws AssemblySyntaxException
Assemble a line instruction at the given address. This method works like {@link #resolveLine(Address, String, AssemblyPatternBlock), except that it derives the context usinggetContextAt(Address).- Parameters:
at- the location of the start of the instructionline- the textual assembly code- Returns:
- the collection of semantic resolution results
- Throws:
AssemblySyntaxException- the textual instruction is not well-formed
-
resolveLine
AssemblyResolutionResults resolveLine(Address at, java.lang.String line, AssemblyPatternBlock ctx) throws AssemblySyntaxException
Assemble a line instruction at the given address, assuming the given context. This method works like {@link #assembleLine(Address,String,AssemblyPatternBlock}, except that it returns all possible resolutions for the parse trees that pass theAssemblySelector.- Parameters:
at- the location of the start of the instructionline- the textual assembly codectx- the context register value at the start of the instruction- Returns:
- the collection of semantic resolution results
- Throws:
AssemblySyntaxException- the textual instruction is not well-formed
-
patchProgram
Instruction patchProgram(AssemblyResolvedConstructor res, Address at) throws MemoryAccessException
Place a resolved (and fully-masked) instruction into the bound program. This method is not valid without a program binding. Also, this method must be called during a program database transaction.- Parameters:
res- the resolved and fully-masked instructionat- the location of the start of the instruction- Returns:
- the new
Instructioncode unit - Throws:
MemoryAccessException- there is an issue writing the result to program memory
-
patchProgram
Instruction patchProgram(byte[] insbytes, Address at) throws MemoryAccessException
Place an instruction into the bound program. This method is not valid without a program binding. Also, this method must be called during a program database transaction.- Parameters:
insbytes- the instruction dataat- the location of the start of the instruction- Returns:
- the new
Instructioncode unit - Throws:
MemoryAccessException- there is an issue writing the result to program memory
-
getContextAt
AssemblyPatternBlock getContextAt(Address addr)
Get the context at a given address If there is a program binding, this will extract the actual context at the given address. Otherwise, it will obtain the default context at the given address for the language.- Parameters:
addr- the address- Returns:
- the context
-
-