Lines Matching refs:op
285 decode_a(struct ud* u, struct ud_operand *op)
289 op->type = UD_OP_PTR;
290 op->size = 32;
291 op->lval.ptr.off = ud_inp_uint16(u);
292 op->lval.ptr.seg = ud_inp_uint16(u);
295 op->type = UD_OP_PTR;
296 op->size = 48;
297 op->lval.ptr.off = ud_inp_uint32(u);
298 op->lval.ptr.seg = ud_inp_uint16(u);
403 decode_imm(struct ud* u, unsigned int s, struct ud_operand *op)
405 op->size = resolve_operand_size(u, s);
406 op->type = UD_OP_IMM;
408 switch (op->size) {
409 case 8: op->lval.sbyte = ud_inp_uint8(u); break;
410 case 16: op->lval.uword = ud_inp_uint16(u); break;
411 case 32: op->lval.udword = ud_inp_uint32(u); break;
412 case 64: op->lval.uqword = ud_inp_uint64(u); break;
450 struct ud_operand *op,
462 op->size = resolve_operand_size(u, size);
469 op->type = UD_OP_REG;
471 op->base = decode_gpr(u, op->size, rm);
473 op->base = resolve_reg(u, type, (REX_B(u->pfx_rex) << 3) | (rm & 7));
482 op->type = UD_OP_MEM;
485 op->base = UD_R_RAX + rm;
487 op->offset = 8;
489 op->offset = 32;
491 op->base = UD_R_RIP;
492 op->offset = 32;
494 op->offset = 0;
502 op->scale = (1 << SIB_S(ud_inp_curr(u))) & ~1;
503 op->index = UD_R_RAX + (SIB_I(ud_inp_curr(u)) | (REX_X(u->pfx_rex) << 3));
504 op->base = UD_R_RAX + (SIB_B(ud_inp_curr(u)) | (REX_B(u->pfx_rex) << 3));
507 if (op->index == UD_R_RSP) {
508 op->index = UD_NONE;
509 op->scale = UD_NONE;
512 if (op->base == UD_R_RBP || op->base == UD_R_R13) {
514 op->base = UD_NONE;
517 op->offset = 8;
519 op->offset = 32;
524 op->base = UD_R_EAX + rm;
526 op->offset = 8;
528 op->offset = 32;
530 op->base = UD_NONE;
531 op->offset = 32;
533 op->offset = 0;
540 op->scale = (1 << SIB_S(ud_inp_curr(u))) & ~1;
541 op->index = UD_R_EAX + (SIB_I(ud_inp_curr(u)) | (REX_X(u->pfx_rex) << 3));
542 op->base = UD_R_EAX + (SIB_B(ud_inp_curr(u)) | (REX_B(u->pfx_rex) << 3));
544 if (op->index == UD_R_ESP) {
545 op->index = UD_NONE;
546 op->scale = UD_NONE;
550 if (op->base == UD_R_EBP) {
552 op->base = UD_NONE;
555 op->offset = 8;
557 op->offset = 32;
566 op->base = bases[rm & 7];
567 op->index = indices[rm & 7];
569 op->offset= 16;
570 op->base = UD_NONE;
572 op->offset = 8;
574 op->offset = 16;
581 switch (op->offset) {
582 case 8 : op->lval.ubyte = ud_inp_uint8(u); break;
583 case 16: op->lval.uword = ud_inp_uint16(u); break;
584 case 32: op->lval.udword = ud_inp_uint32(u); break;
585 case 64: op->lval.uqword = ud_inp_uint64(u); break;
595 decode_o(struct ud* u, unsigned int s, struct ud_operand *op)
599 op->offset = 64;
600 op->lval.uqword = ud_inp_uint64(u);
603 op->offset = 32;
604 op->lval.udword = ud_inp_uint32(u);
607 op->offset = 16;
608 op->lval.uword = ud_inp_uint16(u);
613 op->type = UD_OP_MEM;
614 op->size = resolve_operand_size(u, s);