Linux Kernel
3.7.1
|
Go to the source code of this file.
Macros | |
#define | validate_next(t, insn, n) ((insn)->next_byte + sizeof(t) + n - (insn)->kaddr <= MAX_INSN_SIZE) |
#define | __get_next(t, insn) ({ t r = *(t*)insn->next_byte; insn->next_byte += sizeof(t); r; }) |
#define | __peek_nbyte_next(t, insn, n) ({ t r = *(t*)((insn)->next_byte + n); r; }) |
#define | get_next(t, insn) ({ if (unlikely(!validate_next(t, insn, 0))) goto err_out; __get_next(t, insn); }) |
#define | peek_nbyte_next(t, insn, n) ({ if (unlikely(!validate_next(t, insn, n))) goto err_out; __peek_nbyte_next(t, insn, n); }) |
#define | peek_next(t, insn) peek_nbyte_next(t, insn, 0) |
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) |
int | insn_rip_relative (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) |
#define get_next | ( | t, | |
insn | |||
) | ({ if (unlikely(!validate_next(t, insn, 0))) goto err_out; __get_next(t, 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)
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.
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
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.