This class represents an assembly instruction.  
 More...
#include <Instruction.hpp>
|  | 
| uint64_t | address () const | 
|  | Address of the instruction. 
 | 
| size_t | size () const | 
|  | Size of the instruction in bytes. 
 | 
| const std::vector< uint8_t > & | raw () const | 
|  | Raw bytes of the current instruction. 
 | 
| std::string | mnemonic () const | 
|  | Instruction mnemonic (e.g. br). 
 | 
| std::string | to_string (bool with_address=true) const | 
|  | Representation of the current instruction in a pretty assembly way. 
 | 
| bool | is_call () const | 
|  | True if the instruction is a call. 
 | 
| bool | is_terminator () const | 
|  | True if the instruction marks the end of a basic block. 
 | 
| bool | is_branch () const | 
|  | True if the instruction is a branch. 
 | 
| bool | is_syscall () const | 
|  | True if the instruction is a syscall. 
 | 
| bool | is_memory_access () const | 
|  | True if the instruction performs a memory access. 
 | 
| bool | is_move_reg () const | 
|  | True if the instruction is a register to register move. 
 | 
| bool | is_add () const | 
|  | True if the instruction performs an arithmetic addition. 
 | 
| bool | is_trap () const | 
|  | True if the instruction is a trap. 
 | 
| bool | is_barrier () const | 
|  | True if the instruction prevents executing the instruction that immediatly follows the current. This includes return or unconditional branch instructions. 
 | 
| bool | is_return () const | 
|  | True if the instruction is a return. 
 | 
| bool | is_indirect_branch () const | 
|  | True if the instruction is and indirect branch. 
 | 
| bool | is_conditional_branch () const | 
|  | True if the instruction is conditionally jumping to the next instruction or an instruction into some other basic block. 
 | 
| bool | is_unconditional_branch () const | 
|  | True if the instruction is jumping (unconditionally) to some other basic block. 
 | 
| bool | is_compare () const | 
|  | True if the instruction is a comparison. 
 | 
| bool | is_move_immediate () const | 
|  | True if the instruction is moving an immediate. 
 | 
| bool | is_bitcast () const | 
|  | True if the instruction is doing a bitcast. 
 | 
| MemoryAccess | memory_access () const | 
|  | Memory access flags. 
 | 
| result< uint64_t > | branch_target () const | 
|  | Given a is_branch() instruction, try to evaluate the address of the destination. 
 | 
| const llvm::MCInst & | mcinst () const | 
|  | Return the underlying llvm::MCInst implementation. 
 | 
| template<class T> | 
| const T * | as () const | 
|  | This function can be used to down cast an Instruction instance: 
 | 
| virtual | ~Instruction () | 
This class represents an assembly instruction. 
◆ MemoryAccess
Memory operation flags. 
| Enumerator | 
|---|
| NONE |  | 
| READ |  | 
| WRITE |  | 
| READ_WRITE |  | 
 
 
◆ ~Instruction()
  
  | 
        
          | virtual LIEF::assembly::Instruction::~Instruction | ( |  | ) |  |  | virtual | 
 
 
◆ address()
      
        
          | uint64_t LIEF::assembly::Instruction::address | ( |  | ) | const | 
      
 
Address of the instruction. 
 
 
◆ as()
template<class T> 
  
  | 
        
          | const T * LIEF::assembly::Instruction::as | ( |  | ) | const |  | inline | 
 
This function can be used to down cast an Instruction instance: 
std::unique_ptr<assembly::Instruction> inst = get_inst();
}
This class represents an ARM/Thumb instruction.
Definition arm/Instruction.hpp:28
ARM architecture-related namespace.
Definition arm/Instruction.hpp:25
OPCODE
Definition arm/opcodes.hpp:23
 
 
◆ branch_target()
      
        
          | result< uint64_t > LIEF::assembly::Instruction::branch_target | ( |  | ) | const | 
      
 
Given a is_branch() instruction, try to evaluate the address of the destination. 
 
 
◆ is_add()
      
        
          | bool LIEF::assembly::Instruction::is_add | ( |  | ) | const | 
      
 
True if the instruction performs an arithmetic addition. 
 
 
◆ is_barrier()
      
        
          | bool LIEF::assembly::Instruction::is_barrier | ( |  | ) | const | 
      
 
True if the instruction prevents executing the instruction that immediatly follows the current. This includes return or unconditional branch instructions. 
 
 
◆ is_bitcast()
      
        
          | bool LIEF::assembly::Instruction::is_bitcast | ( |  | ) | const | 
      
 
True if the instruction is doing a bitcast. 
 
 
◆ is_branch()
      
        
          | bool LIEF::assembly::Instruction::is_branch | ( |  | ) | const | 
      
 
True if the instruction is a branch. 
 
 
◆ is_call()
      
        
          | bool LIEF::assembly::Instruction::is_call | ( |  | ) | const | 
      
 
True if the instruction is a call. 
 
 
◆ is_compare()
      
        
          | bool LIEF::assembly::Instruction::is_compare | ( |  | ) | const | 
      
 
True if the instruction is a comparison. 
 
 
◆ is_conditional_branch()
      
        
          | bool LIEF::assembly::Instruction::is_conditional_branch | ( |  | ) | const | 
      
 
True if the instruction is conditionally jumping to the next instruction or an instruction into some other basic block. 
 
 
◆ is_indirect_branch()
      
        
          | bool LIEF::assembly::Instruction::is_indirect_branch | ( |  | ) | const | 
      
 
True if the instruction is and indirect branch. 
This includes instructions that branch through a register (e.g. jmp rax, br x1). 
 
 
◆ is_memory_access()
      
        
          | bool LIEF::assembly::Instruction::is_memory_access | ( |  | ) | const | 
      
 
True if the instruction performs a memory access. 
 
 
◆ is_move_immediate()
      
        
          | bool LIEF::assembly::Instruction::is_move_immediate | ( |  | ) | const | 
      
 
True if the instruction is moving an immediate. 
 
 
◆ is_move_reg()
      
        
          | bool LIEF::assembly::Instruction::is_move_reg | ( |  | ) | const | 
      
 
True if the instruction is a register to register move. 
 
 
◆ is_return()
      
        
          | bool LIEF::assembly::Instruction::is_return | ( |  | ) | const | 
      
 
True if the instruction is a return. 
 
 
◆ is_syscall()
      
        
          | bool LIEF::assembly::Instruction::is_syscall | ( |  | ) | const | 
      
 
True if the instruction is a syscall. 
 
 
◆ is_terminator()
      
        
          | bool LIEF::assembly::Instruction::is_terminator | ( |  | ) | const | 
      
 
True if the instruction marks the end of a basic block. 
 
 
◆ is_trap()
      
        
          | bool LIEF::assembly::Instruction::is_trap | ( |  | ) | const | 
      
 
True if the instruction is a trap. 
- On x86/x86-64 this includes the ud1/ud2 instructions
- On AArch64 this includes the brk/udf instructions 
 
 
◆ is_unconditional_branch()
      
        
          | bool LIEF::assembly::Instruction::is_unconditional_branch | ( |  | ) | const | 
      
 
True if the instruction is jumping (unconditionally) to some other basic block. 
 
 
◆ mcinst()
      
        
          | const llvm::MCInst & LIEF::assembly::Instruction::mcinst | ( |  | ) | const | 
      
 
Return the underlying llvm::MCInst implementation. 
- Warning
- Because of ABI compatibility, this MCInst can only be used with the same version of LLVM used by LIEF (see documentation) 
 
 
◆ memory_access()
      
        
          | MemoryAccess LIEF::assembly::Instruction::memory_access | ( |  | ) | const | 
      
 
 
◆ mnemonic()
      
        
          | std::string LIEF::assembly::Instruction::mnemonic | ( |  | ) | const | 
      
 
 
◆ raw()
      
        
          | const std::vector< uint8_t > & LIEF::assembly::Instruction::raw | ( |  | ) | const | 
      
 
Raw bytes of the current instruction. 
 
 
◆ size()
      
        
          | size_t LIEF::assembly::Instruction::size | ( |  | ) | const | 
      
 
Size of the instruction in bytes. 
 
 
◆ to_string()
      
        
          | std::string LIEF::assembly::Instruction::to_string | ( | bool | with_address = true | ) | const | 
      
 
Representation of the current instruction in a pretty assembly way. 
Referenced by operator<<.
 
 
The documentation for this class was generated from the following file: