x86 RzIL uplifting (#2747)
This commit is contained in:
parent
711fa228ed
commit
ce80a13aed
15 changed files with 7370 additions and 1775 deletions
3831
librz/analysis/arch/x86/x86_il.c
Normal file
3831
librz/analysis/arch/x86/x86_il.c
Normal file
File diff suppressed because it is too large
Load diff
29
librz/analysis/arch/x86/x86_il.h
Normal file
29
librz/analysis/arch/x86/x86_il.h
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// SPDX-FileCopyrightText: 2022 Dhruv Maroo <dhruvmaru007@gmail.com>
|
||||
// SPDX-License-Identifier: LGPL-3.0-only
|
||||
|
||||
#ifndef RZIL_ANALYSIS_X86_IL_H
|
||||
#define RZIL_ANALYSIS_X86_IL_H
|
||||
|
||||
#include <rz_lib.h>
|
||||
#include <rz_analysis.h>
|
||||
#include <capstone/capstone.h>
|
||||
#include <capstone/x86.h>
|
||||
|
||||
#define BITS_PER_BYTE 8
|
||||
#define GPR_FAMILY_COUNT 10
|
||||
|
||||
typedef x86_reg X86Reg;
|
||||
typedef cs_x86_op X86Op;
|
||||
typedef x86_op_mem X86Mem;
|
||||
typedef cs_x86 X86Ins;
|
||||
typedef x86_insn X86InsMnem;
|
||||
|
||||
typedef struct x86_il_instruction_t {
|
||||
const X86Ins *structure;
|
||||
X86InsMnem mnem;
|
||||
} X86ILIns;
|
||||
|
||||
RZ_IPI bool rz_x86_il_opcode(RZ_NONNULL RzAnalysis *analysis, RZ_NONNULL RzAnalysisOp *aop, ut64 pc, RZ_BORROW RZ_NONNULL const X86ILIns *ins);
|
||||
RZ_IPI RzAnalysisILConfig *rz_x86_il_config(RZ_NONNULL RzAnalysis *analysis);
|
||||
|
||||
#endif /* RZIL_ANALYSIS_X86_IL_H */
|
||||
|
|
@ -165,6 +165,7 @@ rz_analysis_sources = [
|
|||
'arch/ppc/ppc_il_ops.c',
|
||||
'arch/ppc/ppc_il_flag_ops.c',
|
||||
'arch/sh/sh_il.c',
|
||||
'arch/x86/x86_il.c',
|
||||
'../asm/arch/amd29k/amd29k.c',
|
||||
'../asm/arch/avr/disassembler.c',
|
||||
'../asm/arch/cil/cil_dis.c',
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <rz_lib.h>
|
||||
#include <capstone/capstone.h>
|
||||
#include <capstone/x86.h>
|
||||
#include "../arch/x86/x86_il.h"
|
||||
|
||||
#if 0
|
||||
CYCLES:
|
||||
|
|
@ -3214,8 +3215,16 @@ static int analop(RzAnalysis *a, RzAnalysisOp *op, ut64 addr, const ut8 *buf, in
|
|||
op_fillval(a, op, &ctx->handle, ctx->insn, mode);
|
||||
}
|
||||
}
|
||||
//#if X86_GRP_PRIVILEGE>0
|
||||
|
||||
if (ctx->insn) {
|
||||
// x86 RzIL uplifting
|
||||
X86ILIns x86_il_ins = {
|
||||
.structure = &ctx->insn->detail->x86,
|
||||
.mnem = ctx->insn->id
|
||||
};
|
||||
rz_x86_il_opcode(a, op, addr, &x86_il_ins);
|
||||
|
||||
//#if X86_GRP_PRIVILEGE>0
|
||||
#if HAVE_CSGRP_PRIVILEGE
|
||||
if (cs_insn_group(ctx->handle, ctx->insn, X86_GRP_PRIVILEGE)) {
|
||||
op->family = RZ_ANALYSIS_OP_FAMILY_PRIV;
|
||||
|
|
@ -3296,15 +3305,15 @@ static char *get_reg_profile(RzAnalysis *analysis) {
|
|||
"seg es .16 58 0\n"
|
||||
"gpr flags .16 56 0\n"
|
||||
"flg cf .1 .448 0\n"
|
||||
"flg pf .1 .449 0\n"
|
||||
"flg af .1 .450 0\n"
|
||||
"flg zf .1 .451 0\n"
|
||||
"flg sf .1 .452 0\n"
|
||||
"flg tf .1 .453 0\n"
|
||||
"flg if .1 .454 0\n"
|
||||
"flg df .1 .455 0\n"
|
||||
"flg of .1 .456 0\n"
|
||||
"flg rf .1 .457 0\n";
|
||||
"flg pf .1 .450 0\n"
|
||||
"flg af .1 .452 0\n"
|
||||
"flg zf .1 .454 0\n"
|
||||
"flg sf .1 .455 0\n"
|
||||
"flg tf .1 .456 0\n"
|
||||
"flg if .1 .457 0\n"
|
||||
"flg df .1 .458 0\n"
|
||||
"flg of .1 .459 0\n"
|
||||
"flg nt .1 .462 0\n";
|
||||
#if 0
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
|
|
@ -3355,11 +3364,18 @@ static char *get_reg_profile(RzAnalysis *analysis) {
|
|||
"gpr bp .16 20 0\n"
|
||||
"gpr eip .32 48 0\n"
|
||||
"gpr ip .16 48 0\n"
|
||||
"seg xds .32 28 0\n"
|
||||
"seg ds .16 28 0\n"
|
||||
"seg xes .32 32 0\n"
|
||||
"seg es .16 32 0\n"
|
||||
"seg xfs .32 36 0\n"
|
||||
"seg fs .16 36 0\n"
|
||||
"seg xgs .32 40 0\n"
|
||||
"seg gs .16 40 0\n"
|
||||
"seg xss .32 64 0\n"
|
||||
"seg ss .16 64 0\n"
|
||||
"seg xcs .32 52 0\n"
|
||||
"seg cs .16 52 0\n"
|
||||
"seg xss .32 52 0\n"
|
||||
"flg eflags .32 .448 0 c1p.a.zstido.n.rv\n"
|
||||
"flg flags .16 .448 0\n"
|
||||
"flg cf .1 .448 0\n"
|
||||
|
|
@ -3374,14 +3390,23 @@ static char *get_reg_profile(RzAnalysis *analysis) {
|
|||
"flg nt .1 .462 0\n"
|
||||
"flg rf .1 .464 0\n"
|
||||
"flg vm .1 .465 0\n"
|
||||
"flg ac .1 .466 0\n"
|
||||
"drx dr0 .32 0 0\n"
|
||||
"drx dr1 .32 4 0\n"
|
||||
"drx dr2 .32 8 0\n"
|
||||
"drx dr3 .32 12 0\n"
|
||||
//"drx dr4 .32 16 0\n"
|
||||
//"drx dr5 .32 20 0\n"
|
||||
"drx dr4 .32 16 0\n"
|
||||
"drx dr5 .32 20 0\n"
|
||||
"drx dr6 .32 24 0\n"
|
||||
"drx dr7 .32 28 0\n"
|
||||
"ctr cr0 .32 0 0\n"
|
||||
"ctr cr1 .32 4 0\n"
|
||||
"ctr cr2 .32 8 0\n"
|
||||
"ctr cr3 .32 12 0\n"
|
||||
"ctr cr4 .32 16 0\n"
|
||||
"ctr cr5 .32 20 0\n"
|
||||
"ctr cr6 .32 24 0\n"
|
||||
"ctr cr7 .32 28 0\n"
|
||||
"xmm@fpu xmm0 .128 160 4\n"
|
||||
"fpu xmm0l .64 160 0\n"
|
||||
"fpu xmm0h .64 168 0\n"
|
||||
|
|
@ -3530,6 +3555,10 @@ static char *get_reg_profile(RzAnalysis *analysis) {
|
|||
"flg if .1 .1161 0 interrupt\n"
|
||||
"flg df .1 .1162 0 direction\n"
|
||||
"flg of .1 .1163 0 overflow\n"
|
||||
"flg nt .1 .1166 0\n"
|
||||
"flg rf .1 .1168 0\n"
|
||||
"flg vm .1 .1169 0\n"
|
||||
"flg ac .1 .1170 0\n"
|
||||
|
||||
"gpr rsp .64 152 0\n"
|
||||
"gpr esp .32 152 0\n"
|
||||
|
|
@ -3546,10 +3575,18 @@ static char *get_reg_profile(RzAnalysis *analysis) {
|
|||
"drx dr1 .64 8 0\n"
|
||||
"drx dr2 .64 16 0\n"
|
||||
"drx dr3 .64 24 0\n"
|
||||
// dr4 32
|
||||
// dr5 40
|
||||
"drx dr4 .64 32 0\n"
|
||||
"drx dr5 .64 40 0\n"
|
||||
"drx dr6 .64 48 0\n"
|
||||
"drx dr7 .64 56 0\n"
|
||||
"ctr cr0 .64 0 0\n"
|
||||
"ctr cr1 .64 8 0\n"
|
||||
"ctr cr2 .64 16 0\n"
|
||||
"ctr cr3 .64 24 0\n"
|
||||
"ctr cr4 .64 32 0\n"
|
||||
"ctr cr5 .64 40 0\n"
|
||||
"ctr cr6 .64 48 0\n"
|
||||
"ctr cr7 .64 56 0\n"
|
||||
|
||||
/*0030 struct user_fpregs_struct
|
||||
0031 {
|
||||
|
|
@ -3743,6 +3780,7 @@ RzAnalysisPlugin rz_analysis_plugin_x86_cs = {
|
|||
.fini = x86_fini,
|
||||
.esil_init = esil_x86_cs_init,
|
||||
.esil_fini = esil_x86_cs_fini,
|
||||
.il_config = rz_x86_il_config,
|
||||
// .esil_intr = esil_x86_cs_intr,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1052,6 +1052,20 @@ static int opaam(RzAsm *a, ut8 *data, const Opcode *op) {
|
|||
return l;
|
||||
}
|
||||
|
||||
static int opaad(RzAsm *a, ut8 *data, const Opcode *op) {
|
||||
is_valid_registers(op);
|
||||
int l = 0;
|
||||
int immediate = op->operands[0].immediate * op->operands[0].sign;
|
||||
data[l++] = 0xd5;
|
||||
if (immediate == 0) {
|
||||
data[l++] = 0x0a;
|
||||
} else if (immediate < 256 && immediate > -129) {
|
||||
data[l++] = immediate;
|
||||
}
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
static int opdec(RzAsm *a, ut8 *data, const Opcode *op) {
|
||||
if (op->operands[1].type) {
|
||||
RZ_LOG_ERROR("assembler: x86.nz: %s: invalid operands\n", op->mnemonic);
|
||||
|
|
@ -4267,7 +4281,7 @@ typedef struct lookup_t {
|
|||
|
||||
LookupTable oplookup[] = {
|
||||
{ "aaa", 0, NULL, 0x37, 1 },
|
||||
{ "aad", 0, NULL, 0xd50a, 2 },
|
||||
{ "aad", 0, opaad, 0 },
|
||||
{ "aam", 0, opaam, 0 },
|
||||
{ "aas", 0, NULL, 0x3f, 1 },
|
||||
{ "adc", 0, &opadc, 0 },
|
||||
|
|
|
|||
|
|
@ -55,6 +55,461 @@ EXPECT=<<EOF
|
|||
"mnemonic": "pushf",
|
||||
"mask": "ff",
|
||||
"esil": "2,sp,-=,eflags,sp,=[2]",
|
||||
"rzil": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "sp",
|
||||
"src": {
|
||||
"opcode": "-",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "sp"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "storew",
|
||||
"mem": 0,
|
||||
"key": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "var",
|
||||
"value": "sp"
|
||||
},
|
||||
"length": 16,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "var",
|
||||
"value": "ss"
|
||||
},
|
||||
"length": 16,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x4",
|
||||
"len": 8
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "nt"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x3",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "of"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "df"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "if"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "tf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "zf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "zf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "af"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "pf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "cf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"length": 16,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sign": false,
|
||||
"prefix": 0,
|
||||
"id": 591,
|
||||
|
|
|
|||
|
|
@ -3066,6 +3066,213 @@ EXPECT=<<EOF
|
|||
"mnemonic": "xor",
|
||||
"mask": "ffff",
|
||||
"esil": "eax,eax,^=,$z,zf,:=,$p,pf,:=,31,$s,sf,:=,0,cf,:=,0,of,:=",
|
||||
"rzil": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "_xor",
|
||||
"src": {
|
||||
"opcode": "^",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "eax"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "var",
|
||||
"value": "eax"
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "eax",
|
||||
"src": {
|
||||
"opcode": "var",
|
||||
"value": "_xor"
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "of",
|
||||
"src": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "cf",
|
||||
"src": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "_result",
|
||||
"src": {
|
||||
"opcode": "var",
|
||||
"value": "_xor"
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "_popcnt",
|
||||
"src": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 8
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "set",
|
||||
"dst": "_val",
|
||||
"src": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "var",
|
||||
"value": "_result"
|
||||
},
|
||||
"length": 8,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "repeat",
|
||||
"condition": {
|
||||
"opcode": "is_zero",
|
||||
"bv": {
|
||||
"opcode": "var",
|
||||
"value": "_val"
|
||||
}
|
||||
},
|
||||
"data_eff": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "_popcnt",
|
||||
"src": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "_popcnt"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "lsb",
|
||||
"bv": {
|
||||
"opcode": "var",
|
||||
"value": "_val"
|
||||
}
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 8
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 8
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "set",
|
||||
"dst": "_val",
|
||||
"src": {
|
||||
"opcode": ">>",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "_val"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 8
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "pf",
|
||||
"src": {
|
||||
"opcode": "is_zero",
|
||||
"bv": {
|
||||
"opcode": "mod",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "_popcnt"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 8
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "zf",
|
||||
"src": {
|
||||
"opcode": "is_zero",
|
||||
"bv": {
|
||||
"opcode": "var",
|
||||
"value": "_result"
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "set",
|
||||
"dst": "sf",
|
||||
"src": {
|
||||
"opcode": "msb",
|
||||
"bv": {
|
||||
"opcode": "var",
|
||||
"value": "_result"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sign": false,
|
||||
"prefix": 0,
|
||||
"id": 334,
|
||||
|
|
@ -3121,6 +3328,461 @@ EXPECT=<<EOF
|
|||
"mnemonic": "pushf",
|
||||
"mask": "ffff",
|
||||
"esil": "4,esp,-=,eflags,esp,=[4]",
|
||||
"rzil": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "esp",
|
||||
"src": {
|
||||
"opcode": "-",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "esp"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x4",
|
||||
"len": 32
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "storew",
|
||||
"mem": 0,
|
||||
"key": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "var",
|
||||
"value": "esp"
|
||||
},
|
||||
"length": 32,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 32
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "var",
|
||||
"value": "ss"
|
||||
},
|
||||
"length": 32,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x4",
|
||||
"len": 8
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "nt"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x3",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "of"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "df"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "if"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "tf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "zf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "zf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "af"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "pf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "cf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"length": 16,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sign": false,
|
||||
"prefix": 0,
|
||||
"id": 591,
|
||||
|
|
@ -3366,7 +4028,7 @@ ao 1
|
|||
p8 1
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
17
|
||||
18
|
||||
address: 0x0
|
||||
opcode: nop
|
||||
esilcost: 0
|
||||
|
|
@ -3383,6 +4045,7 @@ sign: false
|
|||
type: nop
|
||||
cycles: 1
|
||||
esil: ,
|
||||
rzil: nop
|
||||
family: cpu
|
||||
90
|
||||
EOF
|
||||
|
|
|
|||
|
|
@ -974,7 +974,7 @@ ahe test
|
|||
ao~esil
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
18
|
||||
19
|
||||
esilcost: 0
|
||||
esil: test
|
||||
EOF
|
||||
|
|
@ -2153,6 +2153,426 @@ EXPECT=<<EOF
|
|||
"mnemonic": "pushf",
|
||||
"mask": "ffff",
|
||||
"esil": "8,rsp,-=,eflags,rsp,=[8]",
|
||||
"rzil": {
|
||||
"opcode": "seq",
|
||||
"x": {
|
||||
"opcode": "set",
|
||||
"dst": "rsp",
|
||||
"src": {
|
||||
"opcode": "-",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "rsp"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x8",
|
||||
"len": 64
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "storew",
|
||||
"mem": 0,
|
||||
"key": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "rsp"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 64
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"opcode": "cast",
|
||||
"value": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "|",
|
||||
"x": {
|
||||
"opcode": "<<",
|
||||
"x": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "nt"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x3",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "of"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "df"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "if"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "tf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "zf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "zf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "af"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x2",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "pf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"fill_bit": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
},
|
||||
"y": {
|
||||
"opcode": "ite",
|
||||
"condition": {
|
||||
"opcode": "var",
|
||||
"value": "cf"
|
||||
},
|
||||
"x": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x1",
|
||||
"len": 16
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 16
|
||||
}
|
||||
}
|
||||
},
|
||||
"length": 16,
|
||||
"fill": {
|
||||
"opcode": "bool",
|
||||
"value": false
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sign": false,
|
||||
"prefix": 0,
|
||||
"id": 591,
|
||||
|
|
@ -3082,6 +3502,7 @@ sign: false
|
|||
type: rpush
|
||||
cycles: 1
|
||||
esil: rbp,8,rsp,-,=[8],8,rsp,-=
|
||||
rzil: (seq (set rsp (- (var rsp) (bv 64 0x8))) (storew 0 (+ (var rsp) (bv 64 0x0)) (cast 64 false (var rbp))))
|
||||
family: cpu
|
||||
stackop: inc
|
||||
stackptr: 8
|
||||
|
|
|
|||
|
|
@ -1,16 +1,31 @@
|
|||
d "call 0" e8fdff
|
||||
a "jmp 0x0" ebfe
|
||||
a "jmp 0x10" eb0e
|
||||
a "jmp 0x34" eb32
|
||||
a "jne 0x14" 7512
|
||||
a "jnz 0x94" 660f858d000000
|
||||
a "jnz -0x94" 660f8565ffffff
|
||||
a "jno -0x34" 71ca
|
||||
ad "aaa" 37 0x0 (seq (branch (|| (! (ule (& (cast 8 false (var ax)) (bv 8 0xf)) (bv 8 0x9))) (var af)) (seq (set ax (+ (var ax) (bv 16 0x106))) (set af true) (set cf true)) (seq (set af false) (set cf false))) (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (& (cast 8 false (var ax)) (bv 8 0xf))))))
|
||||
ad "aad" d50a 0x0 (seq (set temp_al (cast 8 false (var ax))) (set temp_ah (cast 8 false (>> (var ax) (bv 8 0x8) false))) (set adjusted (& (+ (var temp_al) (* (var temp_ah) (bv 8 0xa))) (bv 8 0xff))) (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (var adjusted)))) (set ax (| (& (var ax) (~ (bv 16 0xff00))) (<< (cast 16 false (bv 8 0x0)) (bv 8 0x8) false))) (set _result (var adjusted)) (set _popcnt (bv 8 0x0)) (set _val (cast 8 false (var _result))) (repeat (is_zero (var _val)) (seq (set _popcnt (+ (var _popcnt) (ite (lsb (var _val)) (bv 8 0x1) (bv 8 0x0)))) (set _val (>> (var _val) (bv 8 0x1) false)))) (set pf (is_zero (mod (var _popcnt) (bv 8 0x2)))) (set zf (is_zero (var _result))) (set sf (msb (var _result))))
|
||||
ad "aad 0x42" d542 0x0 (seq (set temp_al (cast 8 false (var ax))) (set temp_ah (cast 8 false (>> (var ax) (bv 8 0x8) false))) (set adjusted (& (+ (var temp_al) (* (var temp_ah) (bv 8 0x42))) (bv 8 0xff))) (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (var adjusted)))) (set ax (| (& (var ax) (~ (bv 16 0xff00))) (<< (cast 16 false (bv 8 0x0)) (bv 8 0x8) false))) (set _result (var adjusted)) (set _popcnt (bv 8 0x0)) (set _val (cast 8 false (var _result))) (repeat (is_zero (var _val)) (seq (set _popcnt (+ (var _popcnt) (ite (lsb (var _val)) (bv 8 0x1) (bv 8 0x0)))) (set _val (>> (var _val) (bv 8 0x1) false)))) (set pf (is_zero (mod (var _popcnt) (bv 8 0x2)))) (set zf (is_zero (var _result))) (set sf (msb (var _result))))
|
||||
ad "aam" d40a 0x0 (seq (set temp_al (cast 8 false (var ax))) (set ax (| (& (var ax) (~ (bv 16 0xff00))) (<< (cast 16 false (div (var temp_al) (bv 8 0xa))) (bv 8 0x8) false))) (set adjusted (mod (var temp_al) (bv 8 0xa))) (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (var adjusted)))) (set _result (var adjusted)) (set _popcnt (bv 8 0x0)) (set _val (cast 8 false (var _result))) (repeat (is_zero (var _val)) (seq (set _popcnt (+ (var _popcnt) (ite (lsb (var _val)) (bv 8 0x1) (bv 8 0x0)))) (set _val (>> (var _val) (bv 8 0x1) false)))) (set pf (is_zero (mod (var _popcnt) (bv 8 0x2)))) (set zf (is_zero (var _result))) (set sf (msb (var _result))))
|
||||
ad "aam 0x42" d442 0x0 (seq (set temp_al (cast 8 false (var ax))) (set ax (| (& (var ax) (~ (bv 16 0xff00))) (<< (cast 16 false (div (var temp_al) (bv 8 0x42))) (bv 8 0x8) false))) (set adjusted (mod (var temp_al) (bv 8 0x42))) (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (var adjusted)))) (set _result (var adjusted)) (set _popcnt (bv 8 0x0)) (set _val (cast 8 false (var _result))) (repeat (is_zero (var _val)) (seq (set _popcnt (+ (var _popcnt) (ite (lsb (var _val)) (bv 8 0x1) (bv 8 0x0)))) (set _val (>> (var _val) (bv 8 0x1) false)))) (set pf (is_zero (mod (var _popcnt) (bv 8 0x2)))) (set zf (is_zero (var _result))) (set sf (msb (var _result))))
|
||||
ad "aas" 3f 0x0 (seq (branch (|| (! (ule (& (cast 8 false (var ax)) (bv 8 0xf)) (bv 8 0x9))) (var af)) (seq (set ax (- (var ax) (bv 16 0x6))) (set ax (| (& (var ax) (~ (bv 16 0xff00))) (<< (cast 16 false (- (cast 8 false (>> (var ax) (bv 8 0x8) false)) (bv 8 0x1))) (bv 8 0x8) false))) (set af true) (set cf true)) (seq (set af false) (set cf false))) (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (& (cast 8 false (var ax)) (bv 8 0xf))))))
|
||||
adB "cbw" 98
|
||||
d "call 0" e8fdff 0x0 (seq (set _cs (cast 16 false (var cs))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var _cs))) (set _pc (bv 16 0x0)) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var _pc))))
|
||||
d "enter 8, 0" c8080000 0x0 (seq (set _alloc_sz (cast 16 false (bv 16 0x8))) (set _nest_lvl (mod (cast 8 false (bv 16 0x0)) (bv 8 0x20))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var bp))) (set _frame_tmp (var sp)) (branch (is_zero (var _nest_lvl)) nop (seq (branch (! (ule (var _nest_lvl) (bv 8 0x1))) (seq (set _itr (bv 8 0x1)) (repeat (&& (ule (var _itr) (var _nest_lvl)) (! (== (var _itr) (var _nest_lvl)))) (seq (set bp (- (var bp) (bv 16 0x2))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (loadw 0 16 (var bp)))) (set _itr (+ (var _itr) (bv 8 0x1)))))) nop) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var _frame_tmp))))) (set sp (- (var sp) (cast 16 false (var _alloc_sz)))) (set bp (cast 16 false (cast 15 false (var _frame_tmp)))))
|
||||
a "jmp 0x0" ebfe 0x0 (jmp (+ (bv 16 0x0) (bv 16 0x0)))
|
||||
a "jmp 0x10" eb0e 0x0 (jmp (+ (bv 16 0x0) (bv 16 0x10)))
|
||||
a "jmp 0x34" eb32 0x0 (jmp (+ (bv 16 0x0) (bv 16 0x34)))
|
||||
a "jne 0x14" 7512 0x0 (branch (! (var zf)) (jmp (+ (bv 16 0x0) (bv 16 0x14))) nop)
|
||||
a "jnz 0x94" 660f858d000000 0x0 (branch (! (var zf)) (jmp (+ (bv 16 0x0) (bv 16 0x94))) nop)
|
||||
a "jnz -0x94" 660f8565ffffff 0x0 (branch (! (var zf)) (jmp (+ (bv 16 0x0) (bv 16 0xff6c))) nop)
|
||||
a "jno -0x34" 71ca 0x0 (branch (! (var of)) (jmp (+ (bv 16 0x0) (bv 16 0xffcc))) nop)
|
||||
dB "jmp 0xfec50" e95bec
|
||||
d "jmp 0x1fec50" e95bec 0x001ffff2
|
||||
a "mov al, [0xbeef]" a0efbe
|
||||
a "mov ax, [0xbeef]" a1efbe
|
||||
a "test bl, 0x12" f6c312
|
||||
a "test bx, 0x1234" f7c33412
|
||||
d "jmp 0x1fec50" e95bec 0x1ffff2 (jmp (+ (bv 16 0xfff2) (bv 16 0xec50)))
|
||||
ad "leave" c9 0x0 (seq (set sp (var bp)) (set sp (+ (var sp) (bv 16 0x2))) (set bp (loadw 0 16 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)))))
|
||||
ad "loop 0xff92" e290 0x0 (seq (set cx (- (var cx) (bv 16 0x1))) (branch (! (is_zero (var cx))) (jmp (bv 16 0xff92)) nop))
|
||||
a "mov al, [0xbeef]" a0efbe 0x0 (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (loadw 0 8 (bv 16 0xbeef)))))
|
||||
a "mov ax, [0xbeef]" a1efbe 0x0 (set ax (loadw 0 16 (bv 16 0xbeef)))
|
||||
d "popf" 9d 0x0 (seq (set _flags (loadw 0 16 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)))) (set cf (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x2) false)) (set pf (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x2) false)) (set af (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x2) false)) (set zf (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x1) false)) (set sf (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x1) false)) (set tf (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x1) false)) (set if (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x1) false)) (set df (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x1) false)) (set of (lsb (var _flags))) (set _flags (>> (var _flags) (bv 8 0x3) false)) (set nt (lsb (var _flags))) (set sp (+ (var sp) (bv 16 0x2))))
|
||||
ad "push ax" 50 0x0 (seq (set sp (- (var sp) (bv 16 0x4))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var ax))))
|
||||
d "pushf" 9c 0x0 (seq (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (| (<< (ite false (bv 16 0x1) (bv 16 0x0)) (bv 16 0x1) false) (ite (var nt) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x2) false) (bv 16 0x3)) (bv 16 0x1) false) (ite (var of) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x1) false) (ite (var df) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x1) false) (ite (var if) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x1) false) (ite (var tf) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x1) false) (ite (var zf) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x1) false) (ite (var zf) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x2) false) (ite (var af) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x2) false) (ite (var pf) (bv 16 0x1) (bv 16 0x0))) (bv 16 0x1) false) (bv 16 0x1)) (bv 16 0x1) false) (ite (var cf) (bv 16 0x1) (bv 16 0x0))))))
|
||||
d "pushaw" 60 0x0 (seq (set _sp (var sp)) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var ax))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var cx))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var dx))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var bx))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var _sp))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var bp))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var si))) (set sp (- (var sp) (bv 16 0x2))) (storew 0 (+ (+ (cast 16 false (var sp)) (bv 16 0x0)) (<< (cast 16 false (var ss)) (bv 8 0x4) false)) (cast 16 false (var di))))
|
||||
a "test bl, 0x12" f6c312 0x0 (seq (set _res (& (cast 8 false (var bx)) (bv 8 0x12))) (set bx (| (& (var bx) (~ (bv 16 0xff))) (cast 16 false (var _res)))) (set _result (var _res)) (set _popcnt (bv 8 0x0)) (set _val (cast 8 false (var _result))) (repeat (is_zero (var _val)) (seq (set _popcnt (+ (var _popcnt) (ite (lsb (var _val)) (bv 8 0x1) (bv 8 0x0)))) (set _val (>> (var _val) (bv 8 0x1) false)))) (set pf (is_zero (mod (var _popcnt) (bv 8 0x2)))) (set zf (is_zero (var _result))) (set sf (msb (var _result))) (set cf false) (set of false))
|
||||
a "test bx, 0x1234" f7c33412 0x0 (seq (set _res (& (var bx) (bv 16 0x1234))) (set bx (var _res)) (set _result (var _res)) (set _popcnt (bv 8 0x0)) (set _val (cast 8 false (var _result))) (repeat (is_zero (var _val)) (seq (set _popcnt (+ (var _popcnt) (ite (lsb (var _val)) (bv 8 0x1) (bv 8 0x0)))) (set _val (>> (var _val) (bv 8 0x1) false)))) (set pf (is_zero (mod (var _popcnt) (bv 8 0x2)))) (set zf (is_zero (var _result))) (set sf (msb (var _result))) (set cf false) (set of false))
|
||||
aB "test byte [bx], 0x12" f60712
|
||||
aB "test word [bx], 0x1234" f7073412
|
||||
a "xlatb" d7 0x0 (set ax (| (& (var ax) (~ (bv 16 0xff))) (cast 16 false (loadw 0 8 (+ (+ (+ (var bx) (bv 16 0x0)) (<< (cast 16 false (var ds)) (bv 8 0x4) false)) (cast 16 false (cast 8 false (var ax))))))))
|
||||
|
|
|
|||
1615
test/db/asm/x86_32
1615
test/db/asm/x86_32
File diff suppressed because it is too large
Load diff
1929
test/db/asm/x86_64
1929
test/db/asm/x86_64
File diff suppressed because it is too large
Load diff
|
|
@ -18,6 +18,6 @@ e asm.bits=64
|
|||
a8j c745f400000000
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
[{"opcode":"mov dword [rbp - 0xc], 0","disasm":"mov dword [rbp - 0xc], 0","pseudo":"dword [rbp - 0xc] = 0","description":"moves data from src to dst","mnemonic":"mov","mask":"ffffffffffffff","esil":"0,0xc,rbp,-,=[4]","sign":false,"prefix":0,"id":449,"opex":{"operands":[{"size":4,"rw":2,"type":"mem","base":"rbp","scale":1,"disp":-12},{"size":4,"rw":0,"type":"imm","value":0}],"modrm":true,"disp":-12},"addr":0,"bytes":"c745f400000000","val":0,"disp":18446744073709551604,"size":7,"type":"mov","esilcost":12,"scale":0,"refptr":4,"cycles":1,"failcycles":0,"delay":0,"stack":"set","stackptr":8,"family":"cpu"}]
|
||||
[{"opcode":"mov dword [rbp - 0xc], 0","disasm":"mov dword [rbp - 0xc], 0","pseudo":"dword [rbp - 0xc] = 0","description":"moves data from src to dst","mnemonic":"mov","mask":"ffffffffffffff","esil":"0,0xc,rbp,-,=[4]","rzil":{"opcode":"storew","mem":0,"key":{"opcode":"+","x":{"opcode":"var","value":"rbp"},"y":{"opcode":"bitv","bits":"0xfffffffffffffff4","len":64}},"value":{"opcode":"bitv","bits":"0x0","len":32}},"sign":false,"prefix":0,"id":449,"opex":{"operands":[{"size":4,"rw":2,"type":"mem","base":"rbp","scale":1,"disp":-12},{"size":4,"rw":0,"type":"imm","value":0}],"modrm":true,"disp":-12},"addr":0,"bytes":"c745f400000000","val":0,"disp":18446744073709551604,"size":7,"type":"mov","esilcost":12,"scale":0,"refptr":4,"cycles":1,"failcycles":0,"delay":0,"stack":"set","stackptr":8,"family":"cpu"}]
|
||||
EOF
|
||||
RUN
|
||||
|
|
@ -27,6 +27,7 @@ sign: false
|
|||
type: mov
|
||||
cycles: 1
|
||||
esil: 0,0xc,rbp,-,=[4]
|
||||
rzil: (storew 0 (+ (var rbp) (bv 64 0xfffffffffffffff4)) (bv 32 0x0))
|
||||
direction: write
|
||||
family: cpu
|
||||
stackop: set
|
||||
|
|
@ -40,6 +41,27 @@ stackptr: 8
|
|||
"mnemonic": "mov",
|
||||
"mask": "ffffffffffffff",
|
||||
"esil": "0,0xc,rbp,-,=[4]",
|
||||
"rzil": {
|
||||
"opcode": "storew",
|
||||
"mem": 0,
|
||||
"key": {
|
||||
"opcode": "+",
|
||||
"x": {
|
||||
"opcode": "var",
|
||||
"value": "rbp"
|
||||
},
|
||||
"y": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0xfffffffffffffff4",
|
||||
"len": 64
|
||||
}
|
||||
},
|
||||
"value": {
|
||||
"opcode": "bitv",
|
||||
"bits": "0x0",
|
||||
"len": 32
|
||||
}
|
||||
},
|
||||
"sign": false,
|
||||
"prefix": 0,
|
||||
"id": 449,
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -352,13 +352,25 @@ dr0: 0x0
|
|||
dr1: 0x0
|
||||
dr2: 0x0
|
||||
dr3: 0x0
|
||||
dr4: 0x0
|
||||
dr5: 0x0
|
||||
dr6: 0x0
|
||||
dr7: 0x0
|
||||
eflags: 0x0
|
||||
xds: 0x0
|
||||
xes: 0x0
|
||||
xfs: 0x0
|
||||
xgs: 0x0
|
||||
xcs: 0x0
|
||||
xss: 0x0
|
||||
xcs: 0x0
|
||||
cr0: 0x0
|
||||
cr1: 0x0
|
||||
cr2: 0x0
|
||||
cr3: 0x0
|
||||
cr4: 0x0
|
||||
cr5: 0x0
|
||||
cr6: 0x0
|
||||
cr7: 0x0
|
||||
EOF
|
||||
RUN
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue