Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions
insn.h File Reference
#include <asm/inat.h>

Go to the source code of this file.

Data Structures

struct  insn_field
 
struct  insn
 

Macros

#define MAX_INSN_SIZE   16
 
#define X86_MODRM_MOD(modrm)   (((modrm) & 0xc0) >> 6)
 
#define X86_MODRM_REG(modrm)   (((modrm) & 0x38) >> 3)
 
#define X86_MODRM_RM(modrm)   ((modrm) & 0x07)
 
#define X86_SIB_SCALE(sib)   (((sib) & 0xc0) >> 6)
 
#define X86_SIB_INDEX(sib)   (((sib) & 0x38) >> 3)
 
#define X86_SIB_BASE(sib)   ((sib) & 0x07)
 
#define X86_REX_W(rex)   ((rex) & 8)
 
#define X86_REX_R(rex)   ((rex) & 4)
 
#define X86_REX_X(rex)   ((rex) & 2)
 
#define X86_REX_B(rex)   ((rex) & 1)
 
#define X86_VEX_W(vex)   ((vex) & 0x80) /* VEX3 Byte2 */
 
#define X86_VEX_R(vex)   ((vex) & 0x80) /* VEX2/3 Byte1 */
 
#define X86_VEX_X(vex)   ((vex) & 0x40) /* VEX3 Byte1 */
 
#define X86_VEX_B(vex)   ((vex) & 0x20) /* VEX3 Byte1 */
 
#define X86_VEX_L(vex)   ((vex) & 0x04) /* VEX3 Byte2, VEX2 Byte1 */
 
#define X86_VEX3_M(vex)   ((vex) & 0x1f) /* VEX3 Byte1 */
 
#define X86_VEX2_M   1 /* VEX2.M always 1 */
 
#define X86_VEX_V(vex)   (((vex) & 0x78) >> 3) /* VEX3 Byte2, VEX2 Byte1 */
 
#define X86_VEX_P(vex)   ((vex) & 0x03) /* VEX3 Byte2, VEX2 Byte1 */
 
#define X86_VEX_M_MAX   0x1f /* VEX3.M Maximum value */
 

Functions

void insn_init (struct insn *insn, const void *kaddr, int x86_64)
 
void insn_get_prefixes (struct insn *insn)
 
void insn_get_opcode (struct insn *insn)
 
void insn_get_modrm (struct insn *insn)
 
void insn_get_sib (struct insn *insn)
 
void insn_get_displacement (struct insn *insn)
 
void insn_get_immediate (struct insn *insn)
 
void insn_get_length (struct insn *insn)
 
int insn_rip_relative (struct insn *insn)
 

Macro Definition Documentation

#define MAX_INSN_SIZE   16

Definition at line 71 of file insn.h.

#define X86_MODRM_MOD (   modrm)    (((modrm) & 0xc0) >> 6)

Definition at line 73 of file insn.h.

#define X86_MODRM_REG (   modrm)    (((modrm) & 0x38) >> 3)

Definition at line 74 of file insn.h.

#define X86_MODRM_RM (   modrm)    ((modrm) & 0x07)

Definition at line 75 of file insn.h.

#define X86_REX_B (   rex)    ((rex) & 1)

Definition at line 84 of file insn.h.

#define X86_REX_R (   rex)    ((rex) & 4)

Definition at line 82 of file insn.h.

#define X86_REX_W (   rex)    ((rex) & 8)

Definition at line 81 of file insn.h.

#define X86_REX_X (   rex)    ((rex) & 2)

Definition at line 83 of file insn.h.

#define X86_SIB_BASE (   sib)    ((sib) & 0x07)

Definition at line 79 of file insn.h.

#define X86_SIB_INDEX (   sib)    (((sib) & 0x38) >> 3)

Definition at line 78 of file insn.h.

#define X86_SIB_SCALE (   sib)    (((sib) & 0xc0) >> 6)

Definition at line 77 of file insn.h.

#define X86_VEX2_M   1 /* VEX2.M always 1 */

Definition at line 94 of file insn.h.

#define X86_VEX3_M (   vex)    ((vex) & 0x1f) /* VEX3 Byte1 */

Definition at line 93 of file insn.h.

#define X86_VEX_B (   vex)    ((vex) & 0x20) /* VEX3 Byte1 */

Definition at line 90 of file insn.h.

#define X86_VEX_L (   vex)    ((vex) & 0x04) /* VEX3 Byte2, VEX2 Byte1 */

Definition at line 91 of file insn.h.

#define X86_VEX_M_MAX   0x1f /* VEX3.M Maximum value */

Definition at line 97 of file insn.h.

#define X86_VEX_P (   vex)    ((vex) & 0x03) /* VEX3 Byte2, VEX2 Byte1 */

Definition at line 96 of file insn.h.

#define X86_VEX_R (   vex)    ((vex) & 0x80) /* VEX2/3 Byte1 */

Definition at line 88 of file insn.h.

#define X86_VEX_V (   vex)    (((vex) & 0x78) >> 3) /* VEX3 Byte2, VEX2 Byte1 */

Definition at line 95 of file insn.h.

#define X86_VEX_W (   vex)    ((vex) & 0x80) /* VEX3 Byte2 */

Definition at line 87 of file insn.h.

#define X86_VEX_X (   vex)    ((vex) & 0x40) /* VEX3 Byte1 */

Definition at line 89 of file insn.h.

Function Documentation

void insn_get_displacement ( struct insn insn)

insn_get_displacement() - Get the displacement of instruction : &struct insn containing instruction

If necessary, first collects the instruction up to and including the SIB byte. Displacement value is sign-expanded.

Definition at line 331 of file insn.c.

void insn_get_immediate ( struct insn insn)

insn_get_immediate() - Get the immediates of instruction : &struct insn containing instruction

If necessary, first collects the instruction up to and including the displacement bytes. Basically, most of immediates are sign-expanded. Unsigned-value can be get by bit masking with ((1 << (nbytes * 8)) - 1)

Definition at line 502 of file insn.c.

void insn_get_length ( struct insn insn)

insn_get_length() - Get the length of instruction : &struct insn containing instruction

If necessary, first collects the instruction up to and including the immediates bytes.

Definition at line 572 of file insn.c.

void insn_get_modrm ( struct insn insn)

insn_get_modrm - collect ModRM byte, if any : &struct insn containing instruction

Populates ->modrm and updates ->next_byte to point past the ModRM byte, if any. If necessary, first collects the preceding bytes (prefixes and opcode(s)). No effect if ->modrm.got is already 1.

Definition at line 240 of file insn.c.

void insn_get_opcode ( struct insn insn)

insn_get_opcode - collect opcode(s) : &struct insn containing instruction

Populates ->opcode, updates ->next_byte to point past the opcode byte(s), and set ->attr (except for groups). If necessary, first collects any preceding (prefix) bytes. Sets ->opcode.value = opcode1. No effect if ->opcode.got is already 1.

Definition at line 189 of file insn.c.

void insn_get_prefixes ( struct insn insn)

insn_get_prefixes - scan x86 instruction prefix bytes : &struct insn containing instruction

Populates the ->prefixes bitmap, and updates ->next_byte to point to the (first) opcode. No effect if ->prefixes.got is already set.

Definition at line 74 of file insn.c.

void insn_get_sib ( struct insn insn)

insn_get_sib() - Get the SIB byte of instruction : &struct insn containing instruction

If necessary, first collects the instruction up to and including the ModRM byte.

Definition at line 300 of file insn.c.

void insn_init ( struct insn insn,
const void kaddr,
int  x86_64 
)

insn_init() - initialize struct insn : &struct insn to be initialized : address (in kernel memory) of instruction (or copy thereof) : !0 for 64-bit kernel or 64-bit app

Definition at line 53 of file insn.c.

int insn_rip_relative ( struct insn insn)

insn_rip_relative() - Does instruction use RIP-relative addressing mode? : &struct insn containing instruction

If necessary, first collects the instruction up to and including the ModRM byte. No effect if ->x86_64 is 0.

Definition at line 278 of file insn.c.