431 this->architecture = architecture;
433 this->symbolicEngine = symbolicEngine;
434 this->taintEngine = taintEngine;
436 if (architecture ==
nullptr)
439 if (this->symbolicEngine ==
nullptr)
442 if (this->taintEngine ==
nullptr)
837 return this->exception;
846 auto op2 = this->astCtxt->bv(delta, dst.getBitSize());
849 auto node = this->astCtxt->bvadd(op1, op2);
855 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
867 auto op2 = this->astCtxt->bv(delta, dst.getBitSize());
870 auto node = this->astCtxt->bvsub(op1, op2);
876 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
885 auto node = this->astCtxt->bv(0, 1);
897 auto node = this->astCtxt->bv(1, 1);
926 auto op1 = this->symbolicEngine->
getOperandAst(inst, counter);
929 auto node1 = this->astCtxt->ite(
930 this->astCtxt->equal(op1, this->astCtxt->bv(0, counter.getBitSize())),
932 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, counter.getBitSize()))
936 auto node2 = this->astCtxt->ite(
937 this->astCtxt->equal(node1, this->astCtxt->bv(0, counter.getBitSize())),
939 this->astCtxt->bv(inst.
getAddress(), pc.getBitSize())
947 expr1->isTainted = this->taintEngine->
taintUnion(counter, counter);
954 auto op1 = this->symbolicEngine->
getOperandAst(inst, counter);
958 auto node1 = this->astCtxt->ite(
959 this->astCtxt->equal(op1, this->astCtxt->bv(0, counter.getBitSize())),
961 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, counter.getBitSize()))
965 auto node2 = this->astCtxt->ite(
967 this->astCtxt->equal(node1, this->astCtxt->bv(0, counter.getBitSize())),
968 this->astCtxt->equal(op2, this->astCtxt->bvfalse())
971 this->astCtxt->bv(inst.
getAddress(), pc.getBitSize())
979 expr1->isTainted = this->taintEngine->
taintUnion(counter, counter);
986 auto op1 = this->symbolicEngine->
getOperandAst(inst, counter);
990 auto node1 = this->astCtxt->ite(
991 this->astCtxt->equal(op1, this->astCtxt->bv(0, counter.getBitSize())),
993 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, counter.getBitSize()))
997 auto node2 = this->astCtxt->ite(
999 this->astCtxt->equal(node1, this->astCtxt->bv(0, counter.getBitSize())),
1000 this->astCtxt->equal(op2, this->astCtxt->bvtrue())
1003 this->astCtxt->bv(inst.
getAddress(), pc.getBitSize())
1011 expr1->isTainted = this->taintEngine->
taintUnion(counter, counter);
1018 auto node = this->astCtxt->bv(inst.
getNextAddress(), pc.getBitSize());
1044 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0);
1045 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1);
1046 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2);
1047 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3);
1048 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4);
1049 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5);
1050 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6);
1051 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7);
1054 auto fraction_st0 = this->astCtxt->extract(62, 0, st0_ast);
1055 auto fraction_st1 = this->astCtxt->extract(62, 0, st1_ast);
1056 auto fraction_st2 = this->astCtxt->extract(62, 0, st2_ast);
1057 auto fraction_st3 = this->astCtxt->extract(62, 0, st3_ast);
1058 auto fraction_st4 = this->astCtxt->extract(62, 0, st4_ast);
1059 auto fraction_st5 = this->astCtxt->extract(62, 0, st5_ast);
1060 auto fraction_st6 = this->astCtxt->extract(62, 0, st6_ast);
1061 auto fraction_st7 = this->astCtxt->extract(62, 0, st7_ast);
1064 auto integer_st0 = this->astCtxt->extract(63, 63, st0_ast);
1065 auto integer_st1 = this->astCtxt->extract(63, 63, st1_ast);
1066 auto integer_st2 = this->astCtxt->extract(63, 63, st2_ast);
1067 auto integer_st3 = this->astCtxt->extract(63, 63, st3_ast);
1068 auto integer_st4 = this->astCtxt->extract(63, 63, st4_ast);
1069 auto integer_st5 = this->astCtxt->extract(63, 63, st5_ast);
1070 auto integer_st6 = this->astCtxt->extract(63, 63, st6_ast);
1071 auto integer_st7 = this->astCtxt->extract(63, 63, st7_ast);
1074 auto exponent_st0 = this->astCtxt->extract(79, 64, st0_ast);
1075 auto exponent_st1 = this->astCtxt->extract(79, 64, st1_ast);
1076 auto exponent_st2 = this->astCtxt->extract(79, 64, st2_ast);
1077 auto exponent_st3 = this->astCtxt->extract(79, 64, st3_ast);
1078 auto exponent_st4 = this->astCtxt->extract(79, 64, st4_ast);
1079 auto exponent_st5 = this->astCtxt->extract(79, 64, st5_ast);
1080 auto exponent_st6 = this->astCtxt->extract(79, 64, st6_ast);
1081 auto exponent_st7 = this->astCtxt->extract(79, 64, st7_ast);
1084 auto ea0_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0x0000, 16));
1085 auto ea0_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0x0000, 16));
1086 auto ea0_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0x0000, 16));
1087 auto ea0_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0x0000, 16));
1088 auto ea0_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0x0000, 16));
1089 auto ea0_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0x0000, 16));
1090 auto ea0_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0x0000, 16));
1091 auto ea0_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0x0000, 16));
1094 auto ea1_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0xFFFF, 16));
1095 auto ea1_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0xFFFF, 16));
1096 auto ea1_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0xFFFF, 16));
1097 auto ea1_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0xFFFF, 16));
1098 auto ea1_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0xFFFF, 16));
1099 auto ea1_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0xFFFF, 16));
1100 auto ea1_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0xFFFF, 16));
1101 auto ea1_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0xFFFF, 16));
1104 auto ena01_st0 = this->astCtxt->equal(this->astCtxt->lor(ea0_st0, ea1_st0), this->astCtxt->bvfalse());
1105 auto ena01_st1 = this->astCtxt->equal(this->astCtxt->lor(ea0_st1, ea1_st1), this->astCtxt->bvfalse());
1106 auto ena01_st2 = this->astCtxt->equal(this->astCtxt->lor(ea0_st2, ea1_st2), this->astCtxt->bvfalse());
1107 auto ena01_st3 = this->astCtxt->equal(this->astCtxt->lor(ea0_st3, ea1_st3), this->astCtxt->bvfalse());
1108 auto ena01_st4 = this->astCtxt->equal(this->astCtxt->lor(ea0_st4, ea1_st4), this->astCtxt->bvfalse());
1109 auto ena01_st5 = this->astCtxt->equal(this->astCtxt->lor(ea0_st5, ea1_st5), this->astCtxt->bvfalse());
1110 auto ena01_st6 = this->astCtxt->equal(this->astCtxt->lor(ea0_st6, ea1_st6), this->astCtxt->bvfalse());
1111 auto ena01_st7 = this->astCtxt->equal(this->astCtxt->lor(ea0_st7, ea1_st7), this->astCtxt->bvfalse());
1114 auto ib0_st0 = this->astCtxt->equal(integer_st0, this->astCtxt->bv(0, 1));
1115 auto ib0_st1 = this->astCtxt->equal(integer_st1, this->astCtxt->bv(0, 1));
1116 auto ib0_st2 = this->astCtxt->equal(integer_st2, this->astCtxt->bv(0, 1));
1117 auto ib0_st3 = this->astCtxt->equal(integer_st3, this->astCtxt->bv(0, 1));
1118 auto ib0_st4 = this->astCtxt->equal(integer_st4, this->astCtxt->bv(0, 1));
1119 auto ib0_st5 = this->astCtxt->equal(integer_st5, this->astCtxt->bv(0, 1));
1120 auto ib0_st6 = this->astCtxt->equal(integer_st6, this->astCtxt->bv(0, 1));
1121 auto ib0_st7 = this->astCtxt->equal(integer_st7, this->astCtxt->bv(0, 1));
1124 auto fa0_st0 = this->astCtxt->equal(fraction_st0, this->astCtxt->bv(0, 63));
1125 auto fa0_st1 = this->astCtxt->equal(fraction_st1, this->astCtxt->bv(0, 63));
1126 auto fa0_st2 = this->astCtxt->equal(fraction_st2, this->astCtxt->bv(0, 63));
1127 auto fa0_st3 = this->astCtxt->equal(fraction_st3, this->astCtxt->bv(0, 63));
1128 auto fa0_st4 = this->astCtxt->equal(fraction_st4, this->astCtxt->bv(0, 63));
1129 auto fa0_st5 = this->astCtxt->equal(fraction_st5, this->astCtxt->bv(0, 63));
1130 auto fa0_st6 = this->astCtxt->equal(fraction_st6, this->astCtxt->bv(0, 63));
1131 auto fa0_st7 = this->astCtxt->equal(fraction_st7, this->astCtxt->bv(0, 63));
1134 auto db_1_0 = this->astCtxt->ite(ea0_st0,
1135 this->astCtxt->ite(ib0_st0,
1136 this->astCtxt->ite(fa0_st0,
1137 this->astCtxt->bv(1, 2),
1138 this->astCtxt->bv(2, 2)),
1139 this->astCtxt->bv(2, 2)),
1140 this->astCtxt->ite(ena01_st0,
1141 this->astCtxt->ite(ib0_st0,
1142 this->astCtxt->bv(2, 2),
1143 this->astCtxt->bv(0, 2)),
1144 this->astCtxt->bv(2, 2)));
1146 auto db_3_2 = this->astCtxt->ite(ea0_st1,
1147 this->astCtxt->ite(ib0_st1,
1148 this->astCtxt->ite(fa0_st1,
1149 this->astCtxt->bv(1, 2),
1150 this->astCtxt->bv(2, 2)),
1151 this->astCtxt->bv(2, 2)),
1152 this->astCtxt->ite(ena01_st1,
1153 this->astCtxt->ite(ib0_st1,
1154 this->astCtxt->bv(2, 2),
1155 this->astCtxt->bv(0, 2)),
1156 this->astCtxt->bv(2, 2)));
1158 auto db_5_4 = this->astCtxt->ite(ea0_st2,
1159 this->astCtxt->ite(ib0_st2,
1160 this->astCtxt->ite(fa0_st2,
1161 this->astCtxt->bv(1, 2),
1162 this->astCtxt->bv(2, 2)),
1163 this->astCtxt->bv(2, 2)),
1164 this->astCtxt->ite(ena01_st2,
1165 this->astCtxt->ite(ib0_st2,
1166 this->astCtxt->bv(2, 2),
1167 this->astCtxt->bv(0, 2)),
1168 this->astCtxt->bv(2, 2)));
1170 auto db_7_6 = this->astCtxt->ite(ea0_st3,
1171 this->astCtxt->ite(ib0_st3,
1172 this->astCtxt->ite(fa0_st3,
1173 this->astCtxt->bv(1, 2),
1174 this->astCtxt->bv(2, 2)),
1175 this->astCtxt->bv(2, 2)),
1176 this->astCtxt->ite(ena01_st3,
1177 this->astCtxt->ite(ib0_st3,
1178 this->astCtxt->bv(2, 2),
1179 this->astCtxt->bv(0, 2)),
1180 this->astCtxt->bv(2, 2)));
1182 auto db_9_8 = this->astCtxt->ite(ea0_st4,
1183 this->astCtxt->ite(ib0_st4,
1184 this->astCtxt->ite(fa0_st4,
1185 this->astCtxt->bv(1, 2),
1186 this->astCtxt->bv(2, 2)),
1187 this->astCtxt->bv(2, 2)),
1188 this->astCtxt->ite(ena01_st4,
1189 this->astCtxt->ite(ib0_st4,
1190 this->astCtxt->bv(2, 2),
1191 this->astCtxt->bv(0, 2)),
1192 this->astCtxt->bv(2, 2)));
1194 auto db_11_10 = this->astCtxt->ite(ea0_st5,
1195 this->astCtxt->ite(ib0_st5,
1196 this->astCtxt->ite(fa0_st5,
1197 this->astCtxt->bv(1, 2),
1198 this->astCtxt->bv(2, 2)),
1199 this->astCtxt->bv(2, 2)),
1200 this->astCtxt->ite(ena01_st5,
1201 this->astCtxt->ite(ib0_st5,
1202 this->astCtxt->bv(2, 2),
1203 this->astCtxt->bv(0, 2)),
1204 this->astCtxt->bv(2, 2)));
1206 auto db_13_12 = this->astCtxt->ite(ea0_st6,
1207 this->astCtxt->ite(ib0_st6,
1208 this->astCtxt->ite(fa0_st6,
1209 this->astCtxt->bv(1, 2),
1210 this->astCtxt->bv(2, 2)),
1211 this->astCtxt->bv(2, 2)),
1212 this->astCtxt->ite(ena01_st6,
1213 this->astCtxt->ite(ib0_st6,
1214 this->astCtxt->bv(2, 2),
1215 this->astCtxt->bv(0, 2)),
1216 this->astCtxt->bv(2, 2)));
1218 auto db_15_14 = this->astCtxt->ite(ea0_st7,
1219 this->astCtxt->ite(ib0_st7,
1220 this->astCtxt->ite(fa0_st7,
1221 this->astCtxt->bv(1, 2),
1222 this->astCtxt->bv(2, 2)),
1223 this->astCtxt->bv(2, 2)),
1224 this->astCtxt->ite(ena01_st7,
1225 this->astCtxt->ite(ib0_st7,
1226 this->astCtxt->bv(2, 2),
1227 this->astCtxt->bv(0, 2)),
1228 this->astCtxt->bv(2, 2)));
1231 auto node = this->astCtxt->concat(db_15_14,
1232 this->astCtxt->concat(db_13_12,
1233 this->astCtxt->concat(db_11_10,
1234 this->astCtxt->concat(db_9_8,
1235 this->astCtxt->concat(db_7_6,
1236 this->astCtxt->concat(db_5_4,
1237 this->astCtxt->concat(db_3_2, db_1_0)))))));
1252 auto is_ftw_tainted = st0_taint | st1_taint | st2_taint | st3_taint |
1253 st4_taint | st5_taint | st6_taint | st7_taint;
1267 auto low = vol ? 0 : dst.
getLow();
1268 auto high = vol ? bvSize-1 : dst.
getHigh();
1274 auto node = this->astCtxt->ite(
1275 this->astCtxt->equal(
1276 this->astCtxt->bv(0x10, bvSize),
1277 this->astCtxt->bvand(
1278 this->astCtxt->bv(0x10, bvSize),
1279 this->astCtxt->bvxor(
1280 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
1281 this->astCtxt->bvxor(op1, op2)
1285 this->astCtxt->bv(1, 1),
1286 this->astCtxt->bv(0, 1)
1310 auto node = this->astCtxt->ite(
1312 this->astCtxt->bvugt(
1313 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, bvSize)),
1314 this->astCtxt->bv(9, bvSize)
1316 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
1318 this->astCtxt->bv(1, 1),
1319 this->astCtxt->bv(0, 1)
1337 auto low = vol ? 0 : dst.
getLow();
1338 auto high = vol ? bvSize-1 : dst.
getHigh();
1344 auto node = this->astCtxt->ite(
1345 this->astCtxt->equal(
1346 this->astCtxt->bv(0x10, bvSize),
1347 this->astCtxt->bvand(
1348 this->astCtxt->bv(0x10, bvSize),
1349 this->astCtxt->bvxor(
1351 this->astCtxt->extract(high, low, this->astCtxt->reference(parent))
1355 this->astCtxt->bv(1, 1),
1356 this->astCtxt->bv(0, 1)
1380 auto node = this->astCtxt->ite(
1382 this->astCtxt->bvugt(
1383 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, bvSize)),
1384 this->astCtxt->bv(9, bvSize)
1386 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
1388 this->astCtxt->bv(1, 1),
1389 this->astCtxt->bv(0, 1)
1408 auto low = vol ? 0 : dst.
getLow();
1409 auto high = vol ? bvSize-1 : dst.
getHigh();
1415 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
1416 this->astCtxt->bvxor(
1417 this->astCtxt->bvand(op1, op2),
1418 this->astCtxt->bvand(
1419 this->astCtxt->bvxor(
1420 this->astCtxt->bvxor(op1, op2),
1421 this->astCtxt->extract(high, low, this->astCtxt->reference(parent))
1423 this->astCtxt->bvxor(op1, op2))
1445 auto node = this->astCtxt->ite(
1446 this->astCtxt->equal(
1450 this->astCtxt->bv(0, 1),
1451 this->astCtxt->bv(1, 1)
1472 auto node = this->astCtxt->ite(
1473 this->astCtxt->equal(
1477 this->astCtxt->bv(1, 1),
1478 this->astCtxt->bv(0, 1)
1499 auto node = this->astCtxt->ite(
1500 this->astCtxt->equal(
1504 this->astCtxt->bv(1, 1),
1505 this->astCtxt->bv(0, 1)
1527 auto node = this->astCtxt->ite(
1528 this->astCtxt->equal(
1532 this->astCtxt->bv(0, 1),
1533 this->astCtxt->bv(1, 1)
1551 auto low = vol ? 0 : src.
getLow();
1552 auto high = vol ? bvSize-1 : src.
getHigh();
1558 auto node = this->astCtxt->ite(
1559 this->astCtxt->equal(
1560 this->astCtxt->extract(high, low, op1),
1561 this->astCtxt->bv(0, bvSize)
1563 this->astCtxt->bv(1, 1),
1564 this->astCtxt->bv(0, 1)
1585 auto node = this->astCtxt->ite(
1586 this->astCtxt->equal(
1590 this->astCtxt->bv(0, 1),
1591 this->astCtxt->bv(1, 1)
1612 auto node = this->astCtxt->ite(
1613 this->astCtxt->equal(
1617 this->astCtxt->bv(0, 1),
1618 this->astCtxt->bv(1, 1)
1635 auto low = vol ? 0 : dst.
getLow();
1636 auto high = vol ? bvSize-1 : dst.
getHigh();
1642 auto node = this->astCtxt->ite(
1643 this->astCtxt->equal(
1644 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
1645 this->astCtxt->bv(0, bvSize)
1647 this->astCtxt->bv(1, 1),
1648 this->astCtxt->bv(0, 1)
1665 auto bvSize = op2->getBitvectorSize();
1666 auto high = result->getBitvectorSize() - 1;
1669 auto node = this->astCtxt->ite(
1670 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1671 this->symbolicEngine->getOperandAst(cf),
1672 this->astCtxt->extract(high, high, result)
1678 if (op2->evaluate()) {
1680 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1695 auto bvSize = op2->getBitvectorSize();
1696 auto high = result->getBitvectorSize() - 1;
1699 auto node = this->astCtxt->ite(
1700 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1701 this->symbolicEngine->getOperandAst(cf),
1702 this->astCtxt->extract(high, high, result)
1708 if (op2->evaluate()) {
1710 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1724 auto bvSize = op2->getBitvectorSize();
1725 auto low = vol ? 0 : dst.
getLow();
1728 auto node = this->astCtxt->ite(
1729 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1730 this->symbolicEngine->getOperandAst(cf),
1731 this->astCtxt->extract(low, low, this->astCtxt->reference(parent))
1737 if (op2->evaluate()) {
1739 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1753 auto bvSize = op2->getBitvectorSize();
1754 auto high = vol ? bvSize-1 : dst.
getHigh();
1757 auto node = this->astCtxt->ite(
1758 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1759 this->symbolicEngine->getOperandAst(cf),
1760 this->astCtxt->extract(high, high, this->astCtxt->reference(parent))
1766 if (op2->evaluate()) {
1768 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1794 auto node = this->astCtxt->ite(
1795 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1796 this->symbolicEngine->getOperandAst(cf),
1798 this->astCtxt->bvugt(op2, this->astCtxt->bv(bvSize, bvSize)),
1799 this->astCtxt->extract(0, 0, this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize)))),
1800 this->astCtxt->extract(0, 0, this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(op2, this->astCtxt->bv(1, bvSize))))
1807 if (op2->evaluate()) {
1809 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1831 auto node = this->astCtxt->ite(
1832 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1833 this->symbolicEngine->getOperandAst(cf),
1834 this->astCtxt->extract(0, 0,
1835 this->astCtxt->bvlshr(
1837 this->astCtxt->bvsub(
1838 this->astCtxt->bv(bvSize, bvSize),
1848 if (op2->evaluate()) {
1850 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1866 auto bv1Size = op1->getBitvectorSize();
1867 auto bv2Size = op2->getBitvectorSize();
1868 auto bv3Size = op3->getBitvectorSize();
1875 auto node = this->astCtxt->ite(
1876 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
1877 this->symbolicEngine->getOperandAst(cf),
1878 this->astCtxt->extract(
1880 this->astCtxt->bvrol(
1881 this->astCtxt->concat(op2, op1),
1882 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
1890 if (op3->evaluate()) {
1892 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1914 auto node = this->astCtxt->ite(
1915 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1916 this->symbolicEngine->getOperandAst(cf),
1917 this->astCtxt->extract(0, 0,
1918 this->astCtxt->bvlshr(
1920 this->astCtxt->bvsub(
1922 this->astCtxt->bv(1, bvSize))
1930 if (op2->evaluate()) {
1932 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1949 auto bv1Size = op1->getBitvectorSize();
1950 auto bv2Size = op2->getBitvectorSize();
1951 auto bv3Size = op3->getBitvectorSize();
1958 auto node = this->astCtxt->ite(
1959 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
1960 this->symbolicEngine->getOperandAst(cf),
1961 this->astCtxt->extract(
1962 (bvSize * 2) - 1, (bvSize * 2) - 1,
1963 this->astCtxt->bvror(
1964 this->astCtxt->concat(op2, op1),
1965 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
1973 if (op3->evaluate()) {
1975 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1991 auto low = vol ? 0 : dst.
getLow();
1992 auto high = vol ? bvSize-1 : dst.
getHigh();
1998 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
1999 this->astCtxt->bvxor(
2000 this->astCtxt->bvxor(op1, this->astCtxt->bvxor(op2, this->astCtxt->extract(high, low, this->astCtxt->reference(parent)))),
2001 this->astCtxt->bvand(
2002 this->astCtxt->bvxor(op1, this->astCtxt->extract(high, low, this->astCtxt->reference(parent))),
2003 this->astCtxt->bvxor(op1, op2)
2023 auto low = vol ? 0 : src.
getLow();
2024 auto high = vol ? bvSize-1 : src.
getHigh();
2030 auto node = this->astCtxt->ite(
2031 this->astCtxt->equal(
2032 this->astCtxt->extract(high, low, op1),
2033 this->astCtxt->bv(0, bvSize)
2035 this->astCtxt->bv(1, 1),
2036 this->astCtxt->bv(0, 1)
2055 auto low = vol ? 0 : dst.
getLow();
2056 auto high = vol ? bvSize-1 : dst.
getHigh();
2062 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
2063 this->astCtxt->bvand(
2064 this->astCtxt->bvxor(op1, this->astCtxt->bvnot(op2)),
2065 this->astCtxt->bvxor(op1, this->astCtxt->extract(high, low, this->astCtxt->reference(parent)))
2087 auto node = this->astCtxt->ite(
2088 this->astCtxt->equal(
2092 this->astCtxt->bv(0, 1),
2093 this->astCtxt->bv(1, 1)
2114 auto node = this->astCtxt->ite(
2115 this->astCtxt->equal(
2119 this->astCtxt->bv(0, 1),
2120 this->astCtxt->bv(1, 1)
2138 auto low = vol ? 0 : dst.
getLow();
2139 auto high = vol ? bvSize-1 : dst.
getHigh();
2145 auto node = this->astCtxt->extract(0, 0,
2146 this->astCtxt->bvlshr(
2147 this->astCtxt->bvand(this->astCtxt->extract(high, low, this->astCtxt->reference(parent)), op1),
2148 this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize))
2167 auto high = vol ? bvSize-1 : dst.
getHigh();
2171 auto node = this->astCtxt->ite(
2172 this->astCtxt->equal(this->astCtxt->zx(bvSize - op2->getBitvectorSize(), op2), this->astCtxt->bv(1, bvSize)),
2173 this->astCtxt->bvxor(
2174 this->astCtxt->extract(high, high, this->astCtxt->reference(parent)),
2175 this->symbolicEngine->getOperandAst(inst, cf)
2177 this->symbolicEngine->getOperandAst(of)
2183 if (op2->evaluate()) {
2185 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2200 auto bvSize = op2->getBitvectorSize();
2201 auto high = vol ? bvSize-1 : dst.
getHigh();
2204 auto node = this->astCtxt->ite(
2205 this->astCtxt->equal(op2, this->astCtxt->bv(1, bvSize)),
2206 this->astCtxt->bvxor(
2207 this->astCtxt->extract(high, high, this->astCtxt->reference(parent)),
2208 this->astCtxt->extract(high-1, high-1, this->astCtxt->reference(parent))
2210 this->symbolicEngine->getOperandAst(of)
2216 if (op2->evaluate()) {
2218 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2233 auto bvSize = op2->getBitvectorSize();
2238 auto node = this->astCtxt->ite(
2239 this->astCtxt->equal(op2, this->astCtxt->bv(1, bvSize)),
2240 this->astCtxt->bvxor(
2241 this->astCtxt->extract(high, high, op1),
2242 this->symbolicEngine->getOperandAst(inst, cf)
2244 this->symbolicEngine->getOperandAst(of)
2250 if (op2->evaluate()) {
2252 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2274 auto node = this->astCtxt->ite(
2275 this->astCtxt->land(
2276 this->astCtxt->equal(
2278 this->astCtxt->reference(parent),
2279 this->astCtxt->reference(parent)
2282 this->astCtxt->equal(
2284 this->astCtxt->bv(1, bvSize)
2287 this->astCtxt->bv(0, 1),
2288 this->symbolicEngine->getOperandAst(of)
2294 if (op2->evaluate()) {
2296 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2318 auto node = this->astCtxt->ite(
2319 this->astCtxt->equal(
2321 this->astCtxt->bv(1, bvSize)),
2322 this->astCtxt->extract(0, 0,
2323 this->astCtxt->bvxor(
2324 this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize))),
2325 this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(2, bvSize)))
2328 this->symbolicEngine->getOperandAst(of)
2334 if (op2->evaluate()) {
2336 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2353 auto bv1Size = op1->getBitvectorSize();
2354 auto bv2Size = op2->getBitvectorSize();
2355 auto bv3Size = op3->getBitvectorSize();
2362 auto node = this->astCtxt->ite(
2363 this->astCtxt->equal(
2364 this->astCtxt->zx(bvSize - bv3Size, op3),
2365 this->astCtxt->bv(1, bvSize)),
2366 this->astCtxt->bvxor(
2367 this->astCtxt->extract(
2369 this->astCtxt->bvrol(
2370 this->astCtxt->concat(op2, op1),
2371 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2374 this->astCtxt->extract(bvSize-1, bvSize-1, op1)
2376 this->symbolicEngine->getOperandAst(of)
2382 if (op3->evaluate()) {
2384 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2406 auto node = this->astCtxt->ite(
2407 this->astCtxt->equal(
2409 this->astCtxt->bv(1, bvSize)),
2410 this->astCtxt->extract(0, 0, this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize)))),
2411 this->symbolicEngine->getOperandAst(of)
2417 if (op2->evaluate()) {
2419 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2436 auto bv1Size = op1->getBitvectorSize();
2437 auto bv2Size = op2->getBitvectorSize();
2438 auto bv3Size = op3->getBitvectorSize();
2445 auto node = this->astCtxt->ite(
2446 this->astCtxt->equal(
2447 this->astCtxt->zx(bvSize - op3->getBitvectorSize(), op3),
2448 this->astCtxt->bv(1, bvSize)),
2449 this->astCtxt->bvxor(
2450 this->astCtxt->extract(
2451 bvSize - 1, bvSize - 1,
2452 this->astCtxt->bvror(
2453 this->astCtxt->concat(op2, op1),
2454 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2459 this->symbolicEngine->getOperandAst(of)
2465 if (op3->evaluate()) {
2467 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2483 auto low = vol ? 0 : dst.
getLow();
2484 auto high = vol ? bvSize-1 : dst.
getHigh();
2490 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
2491 this->astCtxt->bvand(
2492 this->astCtxt->bvxor(op1, op2),
2493 this->astCtxt->bvxor(op1, this->astCtxt->extract(high, low, this->astCtxt->reference(parent)))
2510 auto low = vol ? 0 : dst.
getLow();
2519 auto node = this->astCtxt->bv(1, 1);
2521 node = this->astCtxt->bvxor(node, this->astCtxt->extract(counter, counter, this->astCtxt->reference(parent)));
2539 auto low = vol ? 0 : dst.
getLow();
2547 auto node1 = this->astCtxt->bv(1, 1);
2549 node1 = this->astCtxt->bvxor(node1, this->astCtxt->extract(counter, counter, this->astCtxt->reference(parent)));
2552 auto node2 = this->astCtxt->ite(
2553 this->astCtxt->equal(this->astCtxt->zx(bvSize - op2->getBitvectorSize(), op2), this->astCtxt->bv(0, bvSize)),
2554 this->symbolicEngine->getOperandAst(pf),
2561 if (op2->evaluate()) {
2563 expr->isTainted = this->taintEngine->
setTaintRegister(pf.getConstRegister(), parent->isTainted);
2577 auto high = vol ? bvSize-1 : dst.
getHigh();
2583 auto node = this->astCtxt->extract(high, high, this->astCtxt->reference(parent));
2600 auto high = vol ? bvSize-1 : dst.
getHigh();
2607 auto node = this->astCtxt->ite(
2608 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
2609 this->symbolicEngine->getOperandAst(sf),
2610 this->astCtxt->extract(high, high, this->astCtxt->reference(parent))
2616 if (op2->evaluate()) {
2618 expr->isTainted = this->taintEngine->
setTaintRegister(sf.getConstRegister(), parent->isTainted);
2635 auto bv1Size = op1->getBitvectorSize();
2636 auto bv2Size = op2->getBitvectorSize();
2637 auto bv3Size = op3->getBitvectorSize();
2644 auto node = this->astCtxt->ite(
2645 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
2646 this->symbolicEngine->getOperandAst(sf),
2647 this->astCtxt->extract(
2649 this->astCtxt->bvrol(
2650 this->astCtxt->concat(op2, op1),
2651 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2659 if (op3->evaluate()) {
2661 expr->isTainted = this->taintEngine->
setTaintRegister(sf.getConstRegister(), parent->isTainted);
2678 auto bv1Size = op1->getBitvectorSize();
2679 auto bv2Size = op2->getBitvectorSize();
2680 auto bv3Size = op3->getBitvectorSize();
2687 auto node = this->astCtxt->ite(
2688 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
2689 this->symbolicEngine->getOperandAst(sf),
2690 this->astCtxt->extract(
2691 bvSize - 1, bvSize - 1,
2692 this->astCtxt->bvror(
2693 this->astCtxt->concat(op2, op1),
2694 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2702 if (op3->evaluate()) {
2704 expr->isTainted = this->taintEngine->
setTaintRegister(sf.getConstRegister(), parent->isTainted);
2718 auto low = vol ? 0 : dst.
getLow();
2719 auto high = vol ? bvSize-1 : dst.
getHigh();
2725 auto node = this->astCtxt->ite(
2726 this->astCtxt->equal(
2727 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
2728 this->astCtxt->bv(0, bvSize)
2730 this->astCtxt->bv(1, 1),
2731 this->astCtxt->bv(0, 1)
2752 auto node = this->astCtxt->ite(
2753 this->astCtxt->equal(op2, this->astCtxt->bv(0, src.
getBitSize())),
2754 this->astCtxt->bvtrue(),
2755 this->astCtxt->bvfalse()
2773 auto low = vol ? 0 : dst.
getLow();
2774 auto high = vol ? bvSize-1 : dst.
getHigh();
2781 auto node = this->astCtxt->ite(
2782 this->astCtxt->equal(this->astCtxt->zx(bvSize - op2->getBitvectorSize(), op2), this->astCtxt->bv(0, bvSize)),
2783 this->symbolicEngine->getOperandAst(zf),
2785 this->astCtxt->equal(
2786 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
2787 this->astCtxt->bv(0, bvSize)
2789 this->astCtxt->bv(1, 1),
2790 this->astCtxt->bv(0, 1)
2797 if (op2->evaluate()) {
2799 expr->isTainted = this->taintEngine->
setTaintRegister(zf.getConstRegister(), parent->isTainted);
2820 auto node = this->astCtxt->ite(
2823 this->astCtxt->bvugt(
2824 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize())),
2825 this->astCtxt->bv(9, src1.getBitSize())
2827 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
2830 this->astCtxt->concat(
2831 this->astCtxt->bvadd(op2, this->astCtxt->bv(1, src2.getBitSize())),
2832 this->astCtxt->bvand(
2833 this->astCtxt->bvadd(op1, this->astCtxt->bv(6, src1.getBitSize())),
2834 this->astCtxt->bv(0xf, src1.getBitSize())
2838 this->astCtxt->concat(
2840 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize()))
2848 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2851 this->afAaa_s(inst, expr, dsttmp, op1, op3);
2852 this->cfAaa_s(inst, expr, dsttmp, op1, op3);
2855 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
2856 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
2857 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
2858 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
2861 this->controlFlow_s(inst);
2882 auto node = this->astCtxt->zx(
2884 this->astCtxt->bvadd(
2886 this->astCtxt->bvmul(op3, op1)
2894 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2897 this->pf_s(inst, expr, dsttmp);
2898 this->sf_s(inst, expr, dsttmp);
2899 this->zf_s(inst, expr, dsttmp);
2902 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
2903 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
2904 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
2907 this->controlFlow_s(inst);
2926 auto node = this->astCtxt->concat(
2927 this->astCtxt->bvudiv(op2, op1),
2928 this->astCtxt->bvurem(op2, op1)
2935 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2938 this->pf_s(inst, expr, dsttmp);
2939 this->sf_s(inst, expr, dsttmp);
2940 this->zf_s(inst, expr, dsttmp);
2943 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
2944 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
2945 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
2948 this->controlFlow_s(inst);
2965 auto node = this->astCtxt->ite(
2968 this->astCtxt->bvugt(
2969 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize())),
2970 this->astCtxt->bv(9, src1.getBitSize())
2972 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
2975 this->astCtxt->concat(
2976 this->astCtxt->bvsub(op2, this->astCtxt->bv(1, src2.getBitSize())),
2977 this->astCtxt->bvand(
2978 this->astCtxt->bvsub(op1, this->astCtxt->bv(6, src1.getBitSize())),
2979 this->astCtxt->bv(0xf, src1.getBitSize())
2983 this->astCtxt->concat(
2985 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize()))
2993 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2996 this->afAaa_s(inst, expr, dsttmp, op1, op3);
2997 this->cfAaa_s(inst, expr, dsttmp, op1, op3);
3000 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3001 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3002 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3003 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
3006 this->controlFlow_s(inst);
3021 auto node = this->astCtxt->bvadd(this->astCtxt->bvadd(op1, op2), this->astCtxt->zx(dst.
getBitSize()-1, op3));
3027 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3028 expr->isTainted = this->taintEngine->
taintUnion(dst, cf);
3031 this->af_s(inst, expr, dst, op1, op2);
3032 this->cfAdd_s(inst, expr, dst, op1, op2);
3033 this->ofAdd_s(inst, expr, dst, op1, op2);
3034 this->pf_s(inst, expr, dst);
3035 this->sf_s(inst, expr, dst);
3036 this->zf_s(inst, expr, dst);
3039 this->controlFlow_s(inst);
3054 auto node = this->astCtxt->bvadd(this->astCtxt->bvadd(op1, op2), this->astCtxt->zx(dst.
getBitSize()-1, op3));
3060 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3061 expr->isTainted = this->taintEngine->
taintUnion(dst, cf);
3064 this->cfAdd_s(inst, expr, dst, op1, op2);
3067 this->controlFlow_s(inst);
3080 auto node = this->astCtxt->bvadd(op1, op2);
3086 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3089 this->af_s(inst, expr, dst, op1, op2);
3090 this->cfAdd_s(inst, expr, dst, op1, op2);
3091 this->ofAdd_s(inst, expr, dst, op1, op2);
3092 this->pf_s(inst, expr, dst);
3093 this->sf_s(inst, expr, dst);
3094 this->zf_s(inst, expr, dst);
3097 this->controlFlow_s(inst);
3110 auto node = this->astCtxt->bvand(op1, op2);
3116 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3119 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
3120 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3121 this->pf_s(inst, expr, dst);
3122 this->sf_s(inst, expr, dst);
3123 this->zf_s(inst, expr, dst);
3126 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3129 this->controlFlow_s(inst);
3143 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op2), op3);
3151 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
3152 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3153 this->sf_s(inst, expr, dst);
3154 this->zf_s(inst, expr, dst);
3157 this->controlFlow_s(inst);
3170 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op1), op2);
3176 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3179 this->controlFlow_s(inst);
3192 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op1), op2);
3198 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3201 this->controlFlow_s(inst);
3214 auto node = this->astCtxt->bvand(op1, op2);
3220 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3223 this->controlFlow_s(inst);
3236 auto node = this->astCtxt->bvand(op1, op2);
3242 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3245 this->controlFlow_s(inst);
3259 auto node = this->astCtxt->bvand(
3260 this->astCtxt->bvlshr(
3264 this->astCtxt->bvsub(
3265 this->astCtxt->bvshl(
3266 this->astCtxt->bv(1, src1.getBitSize()),
3269 this->astCtxt->bv(1, src1.getBitSize())
3280 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
3281 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3282 this->zf_s(inst, expr, dst);
3285 this->controlFlow_s(inst);
3297 auto node = this->astCtxt->bvand(this->astCtxt->bvneg(op1), op1);
3306 this->cfBlsi_s(inst, expr, src, op1);
3307 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3308 this->sf_s(inst, expr, dst);
3309 this->zf_s(inst, expr, dst);
3312 this->controlFlow_s(inst);
3324 auto node = this->astCtxt->bvxor(
3325 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, src.
getBitSize())),
3336 this->cfBlsmsk_s(inst, expr, src, op1);
3337 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3338 this->sf_s(inst, expr, dst);
3339 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF),
"Clears zero flag");
3342 this->controlFlow_s(inst);
3354 auto node = this->astCtxt->bvand(
3355 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, src.
getBitSize())),
3366 this->cfBlsr_s(inst, expr, src, op1);
3367 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3368 this->sf_s(inst, expr, dst);
3369 this->zf_s(inst, expr, dst);
3372 this->controlFlow_s(inst);
3390 node = this->astCtxt->ite(
3391 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3393 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3394 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3395 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3396 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3397 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3398 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3399 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3400 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3401 this->astCtxt->bv(0, bvSize1)
3406 node = this->astCtxt->ite(
3407 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3409 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3410 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3411 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3412 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3413 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3414 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3415 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3416 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3417 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3418 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3419 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3420 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3421 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3422 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3423 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3424 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3425 this->astCtxt->bv(0, bvSize1)
3430 node = this->astCtxt->ite(
3431 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3433 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3434 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3435 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3436 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3437 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3438 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3439 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3440 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3441 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3442 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3443 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3444 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3445 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3446 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3447 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3448 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3449 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3450 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3451 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3452 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3453 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3454 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3455 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3456 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3457 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3458 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3459 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3460 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3461 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3462 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3463 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3464 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3465 this->astCtxt->bv(0, bvSize1)
3466 ))))))))))))))))))))))))))))))))
3470 node = this->astCtxt->ite(
3471 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3473 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3474 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3475 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3476 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3477 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3478 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3479 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3480 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3481 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3482 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3483 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3484 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3485 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3486 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3487 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3488 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3489 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3490 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3491 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3492 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3493 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3494 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3495 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3496 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3497 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3498 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3499 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3500 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3501 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3502 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3503 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3504 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3505 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(32, 32, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
3506 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(33, 33, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
3507 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(34, 34, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
3508 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(35, 35, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
3509 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(36, 36, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
3510 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(37, 37, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
3511 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(38, 38, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
3512 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(39, 39, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
3513 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(40, 40, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
3514 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(41, 41, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
3515 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(42, 42, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
3516 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(43, 43, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
3517 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(44, 44, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
3518 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(45, 45, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
3519 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(46, 46, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
3520 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(47, 47, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
3521 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(48, 48, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
3522 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(49, 49, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
3523 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(50, 50, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
3524 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(51, 51, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
3525 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(52, 52, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
3526 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(53, 53, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
3527 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(54, 54, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
3528 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(55, 55, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
3529 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(56, 56, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
3530 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(57, 57, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
3531 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(58, 58, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
3532 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(59, 59, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
3533 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(60, 60, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
3534 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(61, 61, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
3535 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(62, 62, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
3536 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(63, 63, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
3537 this->astCtxt->bv(0, bvSize1)
3538 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
3552 this->zfBsf_s(inst, expr, src, op2);
3555 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3556 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
3557 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3558 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3559 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3562 this->controlFlow_s(inst);
3580 node = this->astCtxt->ite(
3581 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3583 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3584 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3585 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3586 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3587 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3588 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3589 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3590 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3591 this->astCtxt->bv(0, bvSize1)
3596 node = this->astCtxt->ite(
3597 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3599 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3600 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3601 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3602 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3603 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3604 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3605 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3606 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3607 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3608 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3609 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3610 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3611 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3612 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3613 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3614 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3615 this->astCtxt->bv(0, bvSize1)
3620 node = this->astCtxt->ite(
3621 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3623 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3624 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3625 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3626 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3627 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3628 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3629 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3630 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3631 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3632 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3633 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3634 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3635 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3636 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3637 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3638 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3639 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3640 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3641 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3642 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3643 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3644 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3645 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3646 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3647 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3648 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3649 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3650 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3651 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3652 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3653 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3654 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3655 this->astCtxt->bv(0, bvSize1)
3656 ))))))))))))))))))))))))))))))))
3660 node = this->astCtxt->ite(
3661 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3663 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(63, 63, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
3664 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(62, 62, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
3665 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(61, 61, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
3666 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(60, 60, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
3667 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(59, 59, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
3668 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(58, 58, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
3669 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(57, 57, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
3670 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(56, 56, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
3671 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(55, 55, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
3672 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(54, 54, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
3673 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(53, 53, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
3674 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(52, 52, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
3675 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(51, 51, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
3676 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(50, 50, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
3677 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(49, 49, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
3678 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(48, 48, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
3679 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(47, 47, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
3680 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(46, 46, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
3681 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(45, 45, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
3682 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(44, 44, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
3683 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(43, 43, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
3684 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(42, 42, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
3685 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(41, 41, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
3686 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(40, 40, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
3687 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(39, 39, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
3688 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(38, 38, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
3689 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(37, 37, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
3690 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(36, 36, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
3691 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(35, 35, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
3692 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(34, 34, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
3693 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(33, 33, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
3694 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(32, 32, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
3695 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3696 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3697 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3698 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3699 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3700 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3701 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3702 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3703 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3704 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3705 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3706 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3707 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3708 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3709 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3710 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3711 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3712 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3713 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3714 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3715 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3716 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3717 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3718 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3719 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3720 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3721 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3722 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3723 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3724 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3725 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3726 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3727 this->astCtxt->bv(0, bvSize1)
3728 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
3742 this->zfBsf_s(inst, expr, src, op2);
3745 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3746 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
3747 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3748 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3749 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3752 this->controlFlow_s(inst);
3763 std::list<triton::ast::SharedAbstractNode> bytes;
3766 bytes.push_front(this->astCtxt->extract(63, 56, op1));
3767 bytes.push_front(this->astCtxt->extract(55, 48, op1));
3768 bytes.push_front(this->astCtxt->extract(47, 40, op1));
3769 bytes.push_front(this->astCtxt->extract(39, 32, op1));
3771 bytes.push_front(this->astCtxt->extract(31, 24, op1));
3772 bytes.push_front(this->astCtxt->extract(23, 16, op1));
3773 bytes.push_front(this->astCtxt->extract(15, 8, op1));
3774 bytes.push_front(this->astCtxt->extract(7, 0, op1));
3778 bytes.push_front(this->astCtxt->bv(0, 8));
3779 bytes.push_front(this->astCtxt->bv(0, 8));
3785 auto node = this->astCtxt->concat(bytes);
3800 this->controlFlow_s(inst);
3811 auto op2 = this->astCtxt->zx(src1.getBitSize() - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
3814 auto node = this->astCtxt->extract(0, 0,
3815 this->astCtxt->bvlshr(
3817 this->astCtxt->bvsmod(
3819 this->astCtxt->bv(src1.getBitSize(), src1.getBitSize())
3828 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
3829 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
3832 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3833 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3834 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3835 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3838 this->controlFlow_s(inst);
3849 auto op2 = this->astCtxt->zx(dst2.getBitSize() - src1.getBitSize(), this->symbolicEngine->getOperandAst(inst, src1));
3852 auto node1 = this->astCtxt->extract(0, 0,
3853 this->astCtxt->bvlshr(
3855 this->astCtxt->bvsmod(
3857 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3861 auto node2 = this->astCtxt->ite(
3862 this->astCtxt->equal(node1, this->astCtxt->bvfalse()),
3864 this->astCtxt->bvor(
3866 this->astCtxt->bvshl(
3867 this->astCtxt->bv(1, dst2.getBitSize()),
3868 this->astCtxt->bvsmod(
3870 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3875 this->astCtxt->bvand(
3877 this->astCtxt->bvsub(
3879 this->astCtxt->bvshl(
3880 this->astCtxt->bv(1, dst2.getBitSize()),
3881 this->astCtxt->bvsmod(
3883 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3895 expr1->isTainted = this->taintEngine->
taintUnion(dst1, dst2);
3896 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src1);
3897 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
3900 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3901 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3902 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3903 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3906 this->controlFlow_s(inst);
3917 auto op2 = this->astCtxt->zx(dst2.getBitSize() - src1.getBitSize(), this->symbolicEngine->getOperandAst(inst, src1));
3920 auto node1 = this->astCtxt->extract(0, 0,
3921 this->astCtxt->bvlshr(
3923 this->astCtxt->bvsmod(
3925 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3929 auto node2 = this->astCtxt->ite(
3930 this->astCtxt->equal(node1, this->astCtxt->bvfalse()),
3932 this->astCtxt->bvand(
3934 this->astCtxt->bvsub(
3936 this->astCtxt->bvshl(
3937 this->astCtxt->bv(1, dst2.getBitSize()),
3938 this->astCtxt->bvsmod(
3940 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3952 expr1->isTainted = this->taintEngine->
taintUnion(dst1, dst2);
3953 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src1);
3954 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
3957 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3958 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3959 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3960 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3963 this->controlFlow_s(inst);
3974 auto op2 = this->astCtxt->zx(dst2.getBitSize() - src1.getBitSize(), this->symbolicEngine->getOperandAst(inst, src1));
3977 auto node1 = this->astCtxt->extract(0, 0,
3978 this->astCtxt->bvlshr(
3980 this->astCtxt->bvsmod(
3982 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3986 auto node2 = this->astCtxt->bvor(
3988 this->astCtxt->bvshl(
3989 this->astCtxt->bv(1, dst2.getBitSize()),
3990 this->astCtxt->bvsmod(
3992 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
4002 expr1->isTainted = this->taintEngine->
taintUnion(dst1, dst2);
4003 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src1);
4004 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
4007 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
4008 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
4009 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
4010 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
4013 this->controlFlow_s(inst);
4025 auto stackValue = alignSubStack_s(inst, stack.getSize());
4029 auto node1 = this->astCtxt->bv(inst.
getNextAddress(), pc.getBitSize());
4041 expr1->isTainted = this->taintEngine->
untaintMemory(sp.getMemory());
4065 this->controlFlow_s(inst);
4095 this->controlFlow_s(inst);
4115 this->controlFlow_s(inst);
4120 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
4122 this->controlFlow_s(inst);
4127 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_DF),
"Clears direction flag");
4129 this->controlFlow_s(inst);
4135 this->controlFlow_s(inst);
4163 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4166 this->controlFlow_s(inst);
4171 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_IF),
"Clears interrupt flag");
4173 this->controlFlow_s(inst);
4184 auto node = this->astCtxt->bvnot(op1);
4193 this->controlFlow_s(inst);
4210 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvand(this->astCtxt->bvnot(op3), this->astCtxt->bvnot(op4)), this->astCtxt->bvtrue()), op2, op1);
4216 if (op3->evaluate().is_zero() && op4->evaluate().is_zero()) {
4221 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4224 expr->isTainted |= this->taintEngine->
isTainted(cf) || this->taintEngine->
isTainted(zf);
4227 this->controlFlow_s(inst);
4242 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4248 if (op3->evaluate().is_zero()) {
4253 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4256 expr->isTainted |= this->taintEngine->
isTainted(cf);
4259 this->controlFlow_s(inst);
4274 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4280 if (!op3->evaluate().is_zero()) {
4285 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4288 expr->isTainted |= this->taintEngine->
isTainted(cf);
4291 this->controlFlow_s(inst);
4308 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(op3, op4), this->astCtxt->bvtrue()), op2, op1);
4314 if (!op3->evaluate().is_zero() || !op4->evaluate().is_zero()) {
4319 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4322 expr->isTainted |= this->taintEngine->
isTainted(cf) || this->taintEngine->
isTainted(zf);
4325 this->controlFlow_s(inst);
4340 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4346 if (!op3->evaluate().is_zero()) {
4351 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4354 expr->isTainted |= this->taintEngine->
isTainted(zf);
4357 this->controlFlow_s(inst);
4376 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op3, op4), op5), this->astCtxt->bvfalse()), op2, op1);
4382 if ((op3->evaluate().is_zero() == op4->evaluate().is_zero()) && op5->evaluate().is_zero()) {
4387 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4393 this->controlFlow_s(inst);
4410 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, op4), op2, op1);
4416 if (op3->evaluate().is_zero() == op4->evaluate().is_zero()) {
4421 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4424 expr->isTainted |= this->taintEngine->
isTainted(sf) || this->taintEngine->
isTainted(of);
4427 this->controlFlow_s(inst);
4444 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvxor(op3, op4), this->astCtxt->bvtrue()), op2, op1);
4450 if (op3->evaluate().is_zero() != op4->evaluate().is_zero()) {
4455 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4458 expr->isTainted |= this->taintEngine->
isTainted(sf) || this->taintEngine->
isTainted(of);
4462 this->controlFlow_s(inst);
4481 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op3, op4), op5), this->astCtxt->bvtrue()), op2, op1);
4487 if ((op3->evaluate().is_zero() != op4->evaluate().is_zero()) || !op5->evaluate().is_zero()) {
4492 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4498 this->controlFlow_s(inst);
4513 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4519 if (op3->evaluate().is_zero()) {
4524 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4527 expr->isTainted |= this->taintEngine->
isTainted(zf);
4530 this->controlFlow_s(inst);
4545 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4551 if (op3->evaluate().is_zero()) {
4556 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4559 expr->isTainted |= this->taintEngine->
isTainted(of);
4562 this->controlFlow_s(inst);
4577 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4583 if (op3->evaluate().is_zero()) {
4588 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4591 expr->isTainted |= this->taintEngine->
isTainted(pf);
4594 this->controlFlow_s(inst);
4609 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4615 if (op3->evaluate().is_zero()) {
4620 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4623 expr->isTainted |= this->taintEngine->
isTainted(sf);
4626 this->controlFlow_s(inst);
4641 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4647 if (!op3->evaluate().is_zero()) {
4652 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4655 expr->isTainted |= this->taintEngine->
isTainted(of);
4658 this->controlFlow_s(inst);
4673 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4679 if (!op3->evaluate().is_zero()) {
4684 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4687 expr->isTainted |= this->taintEngine->
isTainted(pf);
4690 this->controlFlow_s(inst);
4705 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4711 if (!op3->evaluate().is_zero()) {
4716 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4719 expr->isTainted |= this->taintEngine->
isTainted(sf);
4722 this->controlFlow_s(inst);
4732 auto op2 = this->astCtxt->sx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
4735 auto node = this->astCtxt->bvsub(op1, op2);
4741 expr->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4744 this->af_s(inst, expr, dst, op1, op2,
true);
4745 this->cfSub_s(inst, expr, dst, op1, op2,
true);
4746 this->ofSub_s(inst, expr, dst, op1, op2,
true);
4747 this->pf_s(inst, expr, dst,
true);
4748 this->sf_s(inst, expr, dst,
true);
4749 this->zf_s(inst, expr, dst,
true);
4752 this->controlFlow_s(inst);
4770 this->controlFlow_s(inst);
4777 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4778 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4782 auto node1 = this->astCtxt->bvsub(op1, op2);
4783 auto node2 = this->astCtxt->ite(
4784 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4785 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::byte, index1.getBitSize())),
4786 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::byte, index1.getBitSize()))
4788 auto node3 = this->astCtxt->ite(
4789 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4790 this->astCtxt->bvadd(op4, this->astCtxt->bv(
triton::size::byte, index2.getBitSize())),
4791 this->astCtxt->bvsub(op4, this->astCtxt->bv(
triton::size::byte, index2.getBitSize()))
4800 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4801 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4802 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4805 this->af_s(inst, expr1, dst, op1, op2,
true);
4806 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4807 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4808 this->pf_s(inst, expr1, dst,
true);
4809 this->sf_s(inst, expr1, dst,
true);
4810 this->zf_s(inst, expr1, dst,
true);
4813 this->controlFlow_s(inst);
4831 this->controlFlow_s(inst);
4838 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4839 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4843 auto node1 = this->astCtxt->bvsub(op1, op2);
4844 auto node2 = this->astCtxt->ite(
4845 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4849 auto node3 = this->astCtxt->ite(
4850 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4861 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4862 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4863 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4866 this->af_s(inst, expr1, dst, op1, op2,
true);
4867 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4868 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4869 this->pf_s(inst, expr1, dst,
true);
4870 this->sf_s(inst, expr1, dst,
true);
4871 this->zf_s(inst, expr1, dst,
true);
4874 this->controlFlow_s(inst);
4892 this->controlFlow_s(inst);
4899 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4900 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4904 auto node1 = this->astCtxt->bvsub(op1, op2);
4905 auto node2 = this->astCtxt->ite(
4906 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4910 auto node3 = this->astCtxt->ite(
4911 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4922 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4923 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4924 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4927 this->af_s(inst, expr1, dst, op1, op2,
true);
4928 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4929 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4930 this->pf_s(inst, expr1, dst,
true);
4931 this->sf_s(inst, expr1, dst,
true);
4932 this->zf_s(inst, expr1, dst,
true);
4935 this->controlFlow_s(inst);
4953 this->controlFlow_s(inst);
4960 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4961 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4965 auto node1 = this->astCtxt->bvsub(op1, op2);
4966 auto node2 = this->astCtxt->ite(
4967 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4968 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::word, index1.getBitSize())),
4969 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::word, index1.getBitSize()))
4971 auto node3 = this->astCtxt->ite(
4972 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4973 this->astCtxt->bvadd(op4, this->astCtxt->bv(
triton::size::word, index2.getBitSize())),
4974 this->astCtxt->bvsub(op4, this->astCtxt->bv(
triton::size::word, index2.getBitSize()))
4983 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4984 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4985 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4988 this->af_s(inst, expr1, dst, op1, op2,
true);
4989 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4990 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4991 this->pf_s(inst, expr1, dst,
true);
4992 this->sf_s(inst, expr1, dst,
true);
4993 this->zf_s(inst, expr1, dst,
true);
4996 this->controlFlow_s(inst);
5008 switch (src1.getSize()) {
5010 accumulator.setRegister(arch::Register(this->architecture->
getRegister(ID_REG_X86_AX)));
5013 accumulator.setRegister(arch::Register(this->architecture->
getRegister(ID_REG_X86_EAX)));
5016 accumulator.setRegister(arch::Register(this->architecture->
getRegister(ID_REG_X86_RAX)));
5021 auto op1 = this->symbolicEngine->
getOperandAst(inst, accumulator);
5024 auto op1p = this->symbolicEngine->
getOperandAst(accumulatorp);
5029 auto nodeq = this->astCtxt->equal(op1, op2);
5030 auto node1 = this->astCtxt->bvsub(op1, op2);
5031 auto node2 = this->astCtxt->ite(nodeq, op3, op2);
5032 auto node3 = this->astCtxt->ite(nodeq, op1, op2);
5033 auto node2p = this->astCtxt->ite(nodeq, op3p, op2p);
5034 auto node3p = this->astCtxt->ite(nodeq, op1p, op2p);
5054 if (nodeq->evaluate() ==
true)
5060 expr1->isTainted = this->taintEngine->
isTainted(accumulator) | this->taintEngine->
isTainted(src1);
5061 expr2->isTainted = expr1->isTainted;
5062 expr3->isTainted = expr1->isTainted;
5063 expr4->isTainted = expr1->isTainted;
5064 expr5->isTainted = expr1->isTainted;
5066 expr7->isTainted = this->taintEngine->
taintAssignment(accumulator, src1);
5069 this->af_s(inst, expr1, accumulator, op1, op2,
true);
5070 this->cfSub_s(inst, expr1, accumulator, op1, op2,
true);
5071 this->ofSub_s(inst, expr1, accumulator, op1, op2,
true);
5072 this->pf_s(inst, expr1, accumulator,
true);
5073 this->sf_s(inst, expr1, accumulator,
true);
5074 this->zf_s(inst, expr1, accumulator,
true);
5077 this->controlFlow_s(inst);
5097 auto node1 = this->astCtxt->bvsub(this->astCtxt->concat(op2, op3), op1);
5099 auto node2 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::dqword)), this->astCtxt->concat(op4, op5), op1);
5101 auto node3 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::dqword)), this->astCtxt->concat(op2, op3), op1);
5106 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(127, 64, node3), src2,
"XCHG16B RDX operation");
5107 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(63, 0, node3), src3,
"XCHG16B RAX operation");
5111 expr2->isTainted = this->taintEngine->
setTaint(src1, this->taintEngine->
isTainted(src2) | this->taintEngine->isTainted(src3));
5116 this->zf_s(inst, expr1, src1,
true);
5119 this->controlFlow_s(inst);
5138 auto op2p = this->symbolicEngine->
getOperandAst(inst, src2p);
5139 auto op3p = this->symbolicEngine->
getOperandAst(inst, src3p);
5143 auto node1 = this->astCtxt->bvsub(this->astCtxt->concat(op2, op3), op1);
5145 auto node2 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::qword)), this->astCtxt->concat(op4, op5), op1);
5147 auto node3 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::qword)), this->astCtxt->concat(op2, op3), op1);
5148 auto node3p = this->astCtxt->ite(
5149 this->astCtxt->equal(
5152 this->astCtxt->concat(op2p, op3p),
5153 this->astCtxt->zx(src2p.getBitSize() + src3p.getBitSize() - src1.getBitSize(), op1)
5166 if (node1->evaluate() == 0)
5167 expr5 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract((src2p.getBitSize() * 2 - 1), src2p.getBitSize(), node3p), src2p,
"XCHG8B EDX operation");
5169 expr5 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(63, 32, node3), src2,
"XCHG8B EDX operation");
5172 if (node1->evaluate() == 0)
5173 expr6 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(src2p.getBitSize() - 1, 0, node3p), src3p,
"XCHG8B EAX operation");
5175 expr6 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(31, 0, node3), src3,
"XCHG8B EAX operation");
5179 expr2->isTainted = this->taintEngine->
setTaint(src1, this->taintEngine->
isTainted(src2) | this->taintEngine->isTainted(src3));
5186 this->zf_s(inst, expr1, src1,
true);
5189 this->controlFlow_s(inst);
5212 node1 = this->astCtxt->bv(0x0000000d, dst1.getBitSize());
5213 node2 = this->astCtxt->bv(0x756e6547, dst2.getBitSize());
5214 node3 = this->astCtxt->bv(0x6c65746e, dst3.getBitSize());
5215 node4 = this->astCtxt->bv(0x49656e69, dst4.getBitSize());
5218 node1 = this->astCtxt->bv(0x000306a9, dst1.getBitSize());
5219 node2 = this->astCtxt->bv(0x02100800, dst2.getBitSize());
5220 node3 = this->astCtxt->bv(0x7fbae3ff, dst3.getBitSize());
5221 node4 = this->astCtxt->bv(0xbfebfbff, dst4.getBitSize());
5224 node1 = this->astCtxt->bv(0x76035a01, dst1.getBitSize());
5225 node2 = this->astCtxt->bv(0x00f0b2ff, dst2.getBitSize());
5226 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5227 node4 = this->astCtxt->bv(0x00ca0000, dst4.getBitSize());
5230 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5231 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5232 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5233 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5236 node1 = this->astCtxt->bv(0x1c004121, dst1.getBitSize());
5237 node2 = this->astCtxt->bv(0x01c0003f, dst2.getBitSize());
5238 node3 = this->astCtxt->bv(0x0000003f, dst3.getBitSize());
5239 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5242 node1 = this->astCtxt->bv(0x00000040, dst1.getBitSize());
5243 node2 = this->astCtxt->bv(0x00000040, dst2.getBitSize());
5244 node3 = this->astCtxt->bv(0x00000003, dst3.getBitSize());
5245 node4 = this->astCtxt->bv(0x00021120, dst4.getBitSize());
5248 node1 = this->astCtxt->bv(0x80000008, dst1.getBitSize());
5249 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5250 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5251 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5254 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5255 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5256 node3 = this->astCtxt->bv(0x00000001, dst3.getBitSize());
5257 node4 = this->astCtxt->bv(0x28100800, dst4.getBitSize());
5260 node1 = this->astCtxt->bv(0x20202020, dst1.getBitSize());
5261 node2 = this->astCtxt->bv(0x49202020, dst2.getBitSize());
5262 node3 = this->astCtxt->bv(0x6c65746e, dst3.getBitSize());
5263 node4 = this->astCtxt->bv(0x20295228, dst4.getBitSize());
5266 node1 = this->astCtxt->bv(0x65726f43, dst1.getBitSize());
5267 node2 = this->astCtxt->bv(0x294d5428, dst2.getBitSize());
5268 node3 = this->astCtxt->bv(0x2d376920, dst3.getBitSize());
5269 node4 = this->astCtxt->bv(0x30323533, dst4.getBitSize());
5272 node1 = this->astCtxt->bv(0x5043204d, dst1.getBitSize());
5273 node2 = this->astCtxt->bv(0x20402055, dst2.getBitSize());
5274 node3 = this->astCtxt->bv(0x30392e32, dst3.getBitSize());
5275 node4 = this->astCtxt->bv(0x007a4847, dst4.getBitSize());
5278 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5279 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5280 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5281 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5284 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5285 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5286 node3 = this->astCtxt->bv(0x01006040, dst3.getBitSize());
5287 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5290 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5291 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5292 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5293 node4 = this->astCtxt->bv(0x00000100, dst4.getBitSize());
5296 node1 = this->astCtxt->bv(0x00003024, dst1.getBitSize());
5297 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5298 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5299 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5302 node1 = this->astCtxt->bv(0x00000007, dst1.getBitSize());
5303 node2 = this->astCtxt->bv(0x00000340, dst2.getBitSize());
5304 node3 = this->astCtxt->bv(0x00000340, dst3.getBitSize());
5305 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5322 this->controlFlow_s(inst);
5352 this->controlFlow_s(inst);
5382 this->controlFlow_s(inst);
5402 this->controlFlow_s(inst);
5411 auto op2 = this->astCtxt->bv(1, dst.
getBitSize());
5414 auto node = this->astCtxt->bvsub(op1, op2);
5420 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
5423 this->af_s(inst, expr, dst, op1, op2);
5424 this->ofSub_s(inst, expr, dst, op1, op2);
5425 this->pf_s(inst, expr, dst);
5426 this->sf_s(inst, expr, dst);
5427 this->zf_s(inst, expr, dst);
5430 this->controlFlow_s(inst);
5438 auto divisor = this->symbolicEngine->
getOperandAst(inst, src);
5446 auto dividend = this->symbolicEngine->
getOperandAst(inst, ax);
5453 auto node = this->astCtxt->concat(
5460 expr->isTainted = this->taintEngine->
taintUnion(ax, src);
5462 if (result->evaluate() > 0xff) {
5473 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, dx), this->symbolicEngine->getOperandAst(inst, ax));
5482 expr1->isTainted = this->taintEngine->
taintUnion(ax, src);
5486 expr2->isTainted = this->taintEngine->
taintUnion(dx, src);
5488 if (temp->evaluate() > 0xffff) {
5499 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, edx), this->symbolicEngine->getOperandAst(inst, eax));
5508 expr1->isTainted = this->taintEngine->
taintUnion(eax, src);
5512 expr2->isTainted = this->taintEngine->
taintUnion(edx, src);
5514 if (temp->evaluate() > 0xffffffff) {
5525 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, rdx), this->symbolicEngine->getOperandAst(inst, rax));
5534 expr1->isTainted = this->taintEngine->
taintUnion(rax, src);
5538 expr2->isTainted = this->taintEngine->
taintUnion(rdx, src);
5540 if (temp->evaluate() > 0xffffffffffffffff) {
5550 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
5551 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
5552 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
5553 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
5554 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
5555 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
5558 if (divisor->evaluate() == 0) {
5564 this->controlFlow_s(inst);
5570 this->controlFlow_s(inst);
5576 this->controlFlow_s(inst);
5591 this->astCtxt->bvlshr(
5593 this->astCtxt->bvmul(
5594 this->astCtxt->zx(126, this->astCtxt->extract(1, 0, op3)),
5617 this->controlFlow_s(inst);
5634 if (m512byte & 0xF) {
5698 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw_addr);
5699 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw_addr);
5700 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw_addr);
5701 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop_addr);
5703 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs_addr);
5705 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds_addr);
5706 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_addr);
5707 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask_addr);
5708 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0_addr);
5709 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1_addr);
5710 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2_addr);
5711 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3_addr);
5712 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4_addr);
5713 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5_addr);
5714 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6_addr);
5715 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7_addr);
5716 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0_addr);
5717 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1_addr);
5718 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2_addr);
5719 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3_addr);
5720 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4_addr);
5721 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5_addr);
5722 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6_addr);
5723 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7_addr);
5724 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
5725 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
5728 auto xmm0_orig = this->symbolicEngine->
getOperandAst(inst, xmm0);
5729 auto xmm1_orig = this->symbolicEngine->
getOperandAst(inst, xmm1);
5730 auto xmm2_orig = this->symbolicEngine->
getOperandAst(inst, xmm2);
5731 auto xmm3_orig = this->symbolicEngine->
getOperandAst(inst, xmm3);
5732 auto xmm4_orig = this->symbolicEngine->
getOperandAst(inst, xmm4);
5733 auto xmm5_orig = this->symbolicEngine->
getOperandAst(inst, xmm5);
5734 auto xmm6_orig = this->symbolicEngine->
getOperandAst(inst, xmm6);
5735 auto xmm7_orig = this->symbolicEngine->
getOperandAst(inst, xmm7);
5738 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
5739 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
5740 auto b64 = this->astCtxt->equal(this->astCtxt->bv(is64bits, 1), this->astCtxt->bv(1, 1));
5741 auto is_fast = this->astCtxt->land(this->astCtxt->land(cpl, ffx), b64);
5744 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
5745 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
5746 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
5747 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
5748 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
5749 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
5750 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
5751 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
5754 auto eb_1_0 = this->astCtxt->extract(0, 0, ftw_ast);
5755 auto eb_3_2 = this->astCtxt->extract(1, 1, ftw_ast);
5756 auto eb_5_4 = this->astCtxt->extract(2, 2, ftw_ast);
5757 auto eb_7_6 = this->astCtxt->extract(3, 3, ftw_ast);
5758 auto eb_9_8 = this->astCtxt->extract(4, 4, ftw_ast);
5759 auto eb_11_10 = this->astCtxt->extract(5, 5, ftw_ast);
5760 auto eb_13_12 = this->astCtxt->extract(6, 6, ftw_ast);
5761 auto eb_15_14 = this->astCtxt->extract(7, 7, ftw_ast);
5764 auto fraction_st0 = this->astCtxt->extract(62, 0, st0_ast);
5765 auto fraction_st1 = this->astCtxt->extract(62, 0, st1_ast);
5766 auto fraction_st2 = this->astCtxt->extract(62, 0, st2_ast);
5767 auto fraction_st3 = this->astCtxt->extract(62, 0, st3_ast);
5768 auto fraction_st4 = this->astCtxt->extract(62, 0, st4_ast);
5769 auto fraction_st5 = this->astCtxt->extract(62, 0, st5_ast);
5770 auto fraction_st6 = this->astCtxt->extract(62, 0, st6_ast);
5771 auto fraction_st7 = this->astCtxt->extract(62, 0, st7_ast);
5774 auto integer_st0 = this->astCtxt->extract(63, 63, st0_ast);
5775 auto integer_st1 = this->astCtxt->extract(63, 63, st1_ast);
5776 auto integer_st2 = this->astCtxt->extract(63, 63, st2_ast);
5777 auto integer_st3 = this->astCtxt->extract(63, 63, st3_ast);
5778 auto integer_st4 = this->astCtxt->extract(63, 63, st4_ast);
5779 auto integer_st5 = this->astCtxt->extract(63, 63, st5_ast);
5780 auto integer_st6 = this->astCtxt->extract(63, 63, st6_ast);
5781 auto integer_st7 = this->astCtxt->extract(63, 63, st7_ast);
5784 auto exponent_st0 = this->astCtxt->extract(79, 64, st0_ast);
5785 auto exponent_st1 = this->astCtxt->extract(79, 64, st1_ast);
5786 auto exponent_st2 = this->astCtxt->extract(79, 64, st2_ast);
5787 auto exponent_st3 = this->astCtxt->extract(79, 64, st3_ast);
5788 auto exponent_st4 = this->astCtxt->extract(79, 64, st4_ast);
5789 auto exponent_st5 = this->astCtxt->extract(79, 64, st5_ast);
5790 auto exponent_st6 = this->astCtxt->extract(79, 64, st6_ast);
5791 auto exponent_st7 = this->astCtxt->extract(79, 64, st7_ast);
5794 auto ea0_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0x0000, 16));
5795 auto ea0_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0x0000, 16));
5796 auto ea0_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0x0000, 16));
5797 auto ea0_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0x0000, 16));
5798 auto ea0_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0x0000, 16));
5799 auto ea0_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0x0000, 16));
5800 auto ea0_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0x0000, 16));
5801 auto ea0_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0x0000, 16));
5804 auto ea1_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0xFFFF, 16));
5805 auto ea1_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0xFFFF, 16));
5806 auto ea1_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0xFFFF, 16));
5807 auto ea1_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0xFFFF, 16));
5808 auto ea1_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0xFFFF, 16));
5809 auto ea1_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0xFFFF, 16));
5810 auto ea1_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0xFFFF, 16));
5811 auto ea1_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0xFFFF, 16));
5814 auto ena01_st0 = this->astCtxt->equal(this->astCtxt->lor(ea0_st0, ea1_st0), this->astCtxt->bvfalse());
5815 auto ena01_st1 = this->astCtxt->equal(this->astCtxt->lor(ea0_st1, ea1_st1), this->astCtxt->bvfalse());
5816 auto ena01_st2 = this->astCtxt->equal(this->astCtxt->lor(ea0_st2, ea1_st2), this->astCtxt->bvfalse());
5817 auto ena01_st3 = this->astCtxt->equal(this->astCtxt->lor(ea0_st3, ea1_st3), this->astCtxt->bvfalse());
5818 auto ena01_st4 = this->astCtxt->equal(this->astCtxt->lor(ea0_st4, ea1_st4), this->astCtxt->bvfalse());
5819 auto ena01_st5 = this->astCtxt->equal(this->astCtxt->lor(ea0_st5, ea1_st5), this->astCtxt->bvfalse());
5820 auto ena01_st6 = this->astCtxt->equal(this->astCtxt->lor(ea0_st6, ea1_st6), this->astCtxt->bvfalse());
5821 auto ena01_st7 = this->astCtxt->equal(this->astCtxt->lor(ea0_st7, ea1_st7), this->astCtxt->bvfalse());
5824 auto ib0_st0 = this->astCtxt->equal(integer_st0, this->astCtxt->bv(0, 1));
5825 auto ib0_st1 = this->astCtxt->equal(integer_st1, this->astCtxt->bv(0, 1));
5826 auto ib0_st2 = this->astCtxt->equal(integer_st2, this->astCtxt->bv(0, 1));
5827 auto ib0_st3 = this->astCtxt->equal(integer_st3, this->astCtxt->bv(0, 1));
5828 auto ib0_st4 = this->astCtxt->equal(integer_st4, this->astCtxt->bv(0, 1));
5829 auto ib0_st5 = this->astCtxt->equal(integer_st5, this->astCtxt->bv(0, 1));
5830 auto ib0_st6 = this->astCtxt->equal(integer_st6, this->astCtxt->bv(0, 1));
5831 auto ib0_st7 = this->astCtxt->equal(integer_st7, this->astCtxt->bv(0, 1));
5834 auto fa0_st0 = this->astCtxt->equal(fraction_st0, this->astCtxt->bv(0, 63));
5835 auto fa0_st1 = this->astCtxt->equal(fraction_st1, this->astCtxt->bv(0, 63));
5836 auto fa0_st2 = this->astCtxt->equal(fraction_st2, this->astCtxt->bv(0, 63));
5837 auto fa0_st3 = this->astCtxt->equal(fraction_st3, this->astCtxt->bv(0, 63));
5838 auto fa0_st4 = this->astCtxt->equal(fraction_st4, this->astCtxt->bv(0, 63));
5839 auto fa0_st5 = this->astCtxt->equal(fraction_st5, this->astCtxt->bv(0, 63));
5840 auto fa0_st6 = this->astCtxt->equal(fraction_st6, this->astCtxt->bv(0, 63));
5841 auto fa0_st7 = this->astCtxt->equal(fraction_st7, this->astCtxt->bv(0, 63));
5844 auto db_1_0 = this->astCtxt->ite(this->astCtxt->equal(eb_1_0, this->astCtxt->bv(0, 1)),
5845 this->astCtxt->bv(3, 2),
5846 this->astCtxt->ite(ea0_st0,
5847 this->astCtxt->ite(ib0_st0,
5848 this->astCtxt->ite(fa0_st0,
5849 this->astCtxt->bv(1, 2),
5850 this->astCtxt->bv(2, 2)),
5851 this->astCtxt->bv(2, 2)),
5852 this->astCtxt->ite(ena01_st0,
5853 this->astCtxt->ite(ib0_st0,
5854 this->astCtxt->bv(2, 2),
5855 this->astCtxt->bv(0, 2)),
5856 this->astCtxt->bv(2, 2))));
5858 auto db_3_2 = this->astCtxt->ite(this->astCtxt->equal(eb_3_2, this->astCtxt->bv(0, 1)),
5859 this->astCtxt->bv(3, 2),
5860 this->astCtxt->ite(ea0_st1,
5861 this->astCtxt->ite(ib0_st1,
5862 this->astCtxt->ite(fa0_st1,
5863 this->astCtxt->bv(1, 2),
5864 this->astCtxt->bv(2, 2)),
5865 this->astCtxt->bv(2, 2)),
5866 this->astCtxt->ite(ena01_st1,
5867 this->astCtxt->ite(ib0_st1,
5868 this->astCtxt->bv(2, 2),
5869 this->astCtxt->bv(0, 2)),
5870 this->astCtxt->bv(2, 2))));
5872 auto db_5_4 = this->astCtxt->ite(this->astCtxt->equal(eb_5_4, this->astCtxt->bv(0, 1)),
5873 this->astCtxt->bv(3, 2),
5874 this->astCtxt->ite(ea0_st2,
5875 this->astCtxt->ite(ib0_st2,
5876 this->astCtxt->ite(fa0_st2,
5877 this->astCtxt->bv(1, 2),
5878 this->astCtxt->bv(2, 2)),
5879 this->astCtxt->bv(2, 2)),
5880 this->astCtxt->ite(ena01_st2,
5881 this->astCtxt->ite(ib0_st2,
5882 this->astCtxt->bv(2, 2),
5883 this->astCtxt->bv(0, 2)),
5884 this->astCtxt->bv(2, 2))));
5886 auto db_7_6 = this->astCtxt->ite(this->astCtxt->equal(eb_7_6, this->astCtxt->bv(0, 1)),
5887 this->astCtxt->bv(3, 2),
5888 this->astCtxt->ite(ea0_st3,
5889 this->astCtxt->ite(ib0_st3,
5890 this->astCtxt->ite(fa0_st3,
5891 this->astCtxt->bv(1, 2),
5892 this->astCtxt->bv(2, 2)),
5893 this->astCtxt->bv(2, 2)),
5894 this->astCtxt->ite(ena01_st3,
5895 this->astCtxt->ite(ib0_st3,
5896 this->astCtxt->bv(2, 2),
5897 this->astCtxt->bv(0, 2)),
5898 this->astCtxt->bv(2, 2))));
5900 auto db_9_8 = this->astCtxt->ite(this->astCtxt->equal(eb_9_8, this->astCtxt->bv(0, 1)),
5901 this->astCtxt->bv(3, 2),
5902 this->astCtxt->ite(ea0_st4,
5903 this->astCtxt->ite(ib0_st4,
5904 this->astCtxt->ite(fa0_st4,
5905 this->astCtxt->bv(1, 2),
5906 this->astCtxt->bv(2, 2)),
5907 this->astCtxt->bv(2, 2)),
5908 this->astCtxt->ite(ena01_st4,
5909 this->astCtxt->ite(ib0_st4,
5910 this->astCtxt->bv(2, 2),
5911 this->astCtxt->bv(0, 2)),
5912 this->astCtxt->bv(2, 2))));
5914 auto db_11_10 = this->astCtxt->ite(this->astCtxt->equal(eb_11_10, this->astCtxt->bv(0, 1)),
5915 this->astCtxt->bv(3, 2),
5916 this->astCtxt->ite(ea0_st5,
5917 this->astCtxt->ite(ib0_st5,
5918 this->astCtxt->ite(fa0_st5,
5919 this->astCtxt->bv(1, 2),
5920 this->astCtxt->bv(2, 2)),
5921 this->astCtxt->bv(2, 2)),
5922 this->astCtxt->ite(ena01_st5,
5923 this->astCtxt->ite(ib0_st5,
5924 this->astCtxt->bv(2, 2),
5925 this->astCtxt->bv(0, 2)),
5926 this->astCtxt->bv(2, 2))));
5928 auto db_13_12 = this->astCtxt->ite(this->astCtxt->equal(eb_13_12, this->astCtxt->bv(0, 1)),
5929 this->astCtxt->bv(3, 2),
5930 this->astCtxt->ite(ea0_st6,
5931 this->astCtxt->ite(ib0_st6,
5932 this->astCtxt->ite(fa0_st6,
5933 this->astCtxt->bv(1, 2),
5934 this->astCtxt->bv(2, 2)),
5935 this->astCtxt->bv(2, 2)),
5936 this->astCtxt->ite(ena01_st6,
5937 this->astCtxt->ite(ib0_st6,
5938 this->astCtxt->bv(2, 2),
5939 this->astCtxt->bv(0, 2)),
5940 this->astCtxt->bv(2, 2))));
5942 auto db_15_14 = this->astCtxt->ite(this->astCtxt->equal(eb_15_14, this->astCtxt->bv(0, 1)),
5943 this->astCtxt->bv(3, 2),
5944 this->astCtxt->ite(ea0_st7,
5945 this->astCtxt->ite(ib0_st7,
5946 this->astCtxt->ite(fa0_st7,
5947 this->astCtxt->bv(1, 2),
5948 this->astCtxt->bv(2, 2)),
5949 this->astCtxt->bv(2, 2)),
5950 this->astCtxt->ite(ena01_st7,
5951 this->astCtxt->ite(ib0_st7,
5952 this->astCtxt->bv(2, 2),
5953 this->astCtxt->bv(0, 2)),
5954 this->astCtxt->bv(2, 2))));
5957 auto uftw_ast = this->astCtxt->concat(db_15_14,
5958 this->astCtxt->concat(db_13_12,
5959 this->astCtxt->concat(db_11_10,
5960 this->astCtxt->concat(db_9_8,
5961 this->astCtxt->concat(db_7_6,
5962 this->astCtxt->concat(db_5_4,
5963 this->astCtxt->concat(db_3_2, db_1_0)))))));
5968 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, uftw_ast, ftw,
"FXRSTOR Updated FTW operation");
5974 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr,
"FXRSTOR MXCSR operation");
5975 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask,
"FXRSTOR MXCSR_MASK operation");
5994 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw, fcw_addr);
5995 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw, fsw_addr);
5996 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw, ftw_addr);
5997 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop, fop_addr);
5998 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip, fip_addr);
5999 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs, fcs_addr);
6000 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp, fdp_addr);
6001 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds, fds_addr);
6002 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr, mxcsr_addr);
6003 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask, mxcsr_mask_addr);
6004 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0, st0_addr);
6005 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1, st1_addr);
6006 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2, st2_addr);
6007 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3, st3_addr);
6008 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4, st4_addr);
6009 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5, st5_addr);
6010 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6, st6_addr);
6011 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7, st7_addr);
6012 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0, xmm0_addr);
6013 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1, xmm1_addr);
6014 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2, xmm2_addr);
6015 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3, xmm3_addr);
6016 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4, xmm4_addr);
6017 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5, xmm5_addr);
6018 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6, xmm6_addr);
6019 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7, xmm7_addr);
6041 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8_addr);
6042 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9_addr);
6043 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10_addr);
6044 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11_addr);
6045 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12_addr);
6046 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13_addr);
6047 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14_addr);
6048 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15_addr);
6051 auto xmm8_orig = this->symbolicEngine->
getOperandAst(inst, xmm8);
6052 auto xmm9_orig = this->symbolicEngine->
getOperandAst(inst, xmm9);
6053 auto xmm10_orig = this->symbolicEngine->
getOperandAst(inst, xmm10);
6054 auto xmm11_orig = this->symbolicEngine->
getOperandAst(inst, xmm11);
6055 auto xmm12_orig = this->symbolicEngine->
getOperandAst(inst, xmm12);
6056 auto xmm13_orig = this->symbolicEngine->
getOperandAst(inst, xmm13);
6057 auto xmm14_orig = this->symbolicEngine->
getOperandAst(inst, xmm14);
6058 auto xmm15_orig = this->symbolicEngine->
getOperandAst(inst, xmm15);
6061 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
6062 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
6063 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
6064 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
6065 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
6066 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
6067 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
6068 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
6072 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10,
"FXRSTOR XMM10 operation");
6073 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11,
"FXRSTOR XMM11 operation");
6074 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12,
"FXRSTOR XMM12 operation");
6075 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13,
"FXRSTOR XMM13 operation");
6076 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14,
"FXRSTOR XMM14 operation");
6077 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15,
"FXRSTOR XMM15 operation");
6079 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8, xmm8_addr);
6080 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9, xmm9_addr);
6081 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10, xmm10_addr);
6082 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11, xmm11_addr);
6083 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12, xmm12_addr);
6084 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13, xmm13_addr);
6085 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14, xmm14_addr);
6086 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15, xmm15_addr);
6090 this->controlFlow_s(inst);
6101 if (m512byte & 0xF) {
6181 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw_addr);
6182 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw_addr);
6183 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw_addr);
6184 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop_addr);
6185 auto fip_ast = this->symbolicEngine->
getOperandAst(inst, fip_addr);
6186 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs_addr);
6187 auto fdp_ast = this->symbolicEngine->
getOperandAst(inst, fdp_addr);
6188 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds_addr);
6189 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_addr);
6190 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask_addr);
6191 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0_addr);
6192 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1_addr);
6193 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2_addr);
6194 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3_addr);
6195 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4_addr);
6196 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5_addr);
6197 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6_addr);
6198 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7_addr);
6199 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0_addr);
6200 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1_addr);
6201 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2_addr);
6202 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3_addr);
6203 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4_addr);
6204 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5_addr);
6205 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6_addr);
6206 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7_addr);
6207 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8_addr);
6208 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9_addr);
6209 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10_addr);
6210 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11_addr);
6211 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12_addr);
6212 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13_addr);
6213 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14_addr);
6214 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15_addr);
6215 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
6216 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
6219 auto xmm0_orig = this->symbolicEngine->
getOperandAst(inst, xmm0);
6220 auto xmm1_orig = this->symbolicEngine->
getOperandAst(inst, xmm1);
6221 auto xmm2_orig = this->symbolicEngine->
getOperandAst(inst, xmm2);
6222 auto xmm3_orig = this->symbolicEngine->
getOperandAst(inst, xmm3);
6223 auto xmm4_orig = this->symbolicEngine->
getOperandAst(inst, xmm4);
6224 auto xmm5_orig = this->symbolicEngine->
getOperandAst(inst, xmm5);
6225 auto xmm6_orig = this->symbolicEngine->
getOperandAst(inst, xmm6);
6226 auto xmm7_orig = this->symbolicEngine->
getOperandAst(inst, xmm7);
6227 auto xmm8_orig = this->symbolicEngine->
getOperandAst(inst, xmm8);
6228 auto xmm9_orig = this->symbolicEngine->
getOperandAst(inst, xmm9);
6229 auto xmm10_orig = this->symbolicEngine->
getOperandAst(inst, xmm10);
6230 auto xmm11_orig = this->symbolicEngine->
getOperandAst(inst, xmm11);
6231 auto xmm12_orig = this->symbolicEngine->
getOperandAst(inst, xmm12);
6232 auto xmm13_orig = this->symbolicEngine->
getOperandAst(inst, xmm13);
6233 auto xmm14_orig = this->symbolicEngine->
getOperandAst(inst, xmm14);
6234 auto xmm15_orig = this->symbolicEngine->
getOperandAst(inst, xmm15);
6237 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
6238 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
6239 auto is_fast = this->astCtxt->land(cpl, ffx);
6242 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
6243 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
6244 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
6245 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
6246 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
6247 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
6248 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
6249 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
6250 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
6251 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
6252 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
6253 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
6254 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
6255 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
6256 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
6257 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
6260 auto eb_1_0 = this->astCtxt->extract(0, 0, ftw_ast);
6261 auto eb_3_2 = this->astCtxt->extract(1, 1, ftw_ast);
6262 auto eb_5_4 = this->astCtxt->extract(2, 2, ftw_ast);
6263 auto eb_7_6 = this->astCtxt->extract(3, 3, ftw_ast);
6264 auto eb_9_8 = this->astCtxt->extract(4, 4, ftw_ast);
6265 auto eb_11_10 = this->astCtxt->extract(5, 5, ftw_ast);
6266 auto eb_13_12 = this->astCtxt->extract(6, 6, ftw_ast);
6267 auto eb_15_14 = this->astCtxt->extract(7, 7, ftw_ast);
6270 auto fraction_st0 = this->astCtxt->extract(62, 0, st0_ast);
6271 auto fraction_st1 = this->astCtxt->extract(62, 0, st1_ast);
6272 auto fraction_st2 = this->astCtxt->extract(62, 0, st2_ast);
6273 auto fraction_st3 = this->astCtxt->extract(62, 0, st3_ast);
6274 auto fraction_st4 = this->astCtxt->extract(62, 0, st4_ast);
6275 auto fraction_st5 = this->astCtxt->extract(62, 0, st5_ast);
6276 auto fraction_st6 = this->astCtxt->extract(62, 0, st6_ast);
6277 auto fraction_st7 = this->astCtxt->extract(62, 0, st7_ast);
6280 auto integer_st0 = this->astCtxt->extract(63, 63, st0_ast);
6281 auto integer_st1 = this->astCtxt->extract(63, 63, st1_ast);
6282 auto integer_st2 = this->astCtxt->extract(63, 63, st2_ast);
6283 auto integer_st3 = this->astCtxt->extract(63, 63, st3_ast);
6284 auto integer_st4 = this->astCtxt->extract(63, 63, st4_ast);
6285 auto integer_st5 = this->astCtxt->extract(63, 63, st5_ast);
6286 auto integer_st6 = this->astCtxt->extract(63, 63, st6_ast);
6287 auto integer_st7 = this->astCtxt->extract(63, 63, st7_ast);
6290 auto exponent_st0 = this->astCtxt->extract(79, 64, st0_ast);
6291 auto exponent_st1 = this->astCtxt->extract(79, 64, st1_ast);
6292 auto exponent_st2 = this->astCtxt->extract(79, 64, st2_ast);
6293 auto exponent_st3 = this->astCtxt->extract(79, 64, st3_ast);
6294 auto exponent_st4 = this->astCtxt->extract(79, 64, st4_ast);
6295 auto exponent_st5 = this->astCtxt->extract(79, 64, st5_ast);
6296 auto exponent_st6 = this->astCtxt->extract(79, 64, st6_ast);
6297 auto exponent_st7 = this->astCtxt->extract(79, 64, st7_ast);
6300 auto ea0_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0x0000, 16));
6301 auto ea0_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0x0000, 16));
6302 auto ea0_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0x0000, 16));
6303 auto ea0_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0x0000, 16));
6304 auto ea0_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0x0000, 16));
6305 auto ea0_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0x0000, 16));
6306 auto ea0_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0x0000, 16));
6307 auto ea0_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0x0000, 16));
6310 auto ea1_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0xFFFF, 16));
6311 auto ea1_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0xFFFF, 16));
6312 auto ea1_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0xFFFF, 16));
6313 auto ea1_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0xFFFF, 16));
6314 auto ea1_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0xFFFF, 16));
6315 auto ea1_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0xFFFF, 16));
6316 auto ea1_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0xFFFF, 16));
6317 auto ea1_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0xFFFF, 16));
6320 auto ena01_st0 = this->astCtxt->equal(this->astCtxt->lor(ea0_st0, ea1_st0), this->astCtxt->bvfalse());
6321 auto ena01_st1 = this->astCtxt->equal(this->astCtxt->lor(ea0_st1, ea1_st1), this->astCtxt->bvfalse());
6322 auto ena01_st2 = this->astCtxt->equal(this->astCtxt->lor(ea0_st2, ea1_st2), this->astCtxt->bvfalse());
6323 auto ena01_st3 = this->astCtxt->equal(this->astCtxt->lor(ea0_st3, ea1_st3), this->astCtxt->bvfalse());
6324 auto ena01_st4 = this->astCtxt->equal(this->astCtxt->lor(ea0_st4, ea1_st4), this->astCtxt->bvfalse());
6325 auto ena01_st5 = this->astCtxt->equal(this->astCtxt->lor(ea0_st5, ea1_st5), this->astCtxt->bvfalse());
6326 auto ena01_st6 = this->astCtxt->equal(this->astCtxt->lor(ea0_st6, ea1_st6), this->astCtxt->bvfalse());
6327 auto ena01_st7 = this->astCtxt->equal(this->astCtxt->lor(ea0_st7, ea1_st7), this->astCtxt->bvfalse());
6330 auto ib0_st0 = this->astCtxt->equal(integer_st0, this->astCtxt->bv(0, 1));
6331 auto ib0_st1 = this->astCtxt->equal(integer_st1, this->astCtxt->bv(0, 1));
6332 auto ib0_st2 = this->astCtxt->equal(integer_st2, this->astCtxt->bv(0, 1));
6333 auto ib0_st3 = this->astCtxt->equal(integer_st3, this->astCtxt->bv(0, 1));
6334 auto ib0_st4 = this->astCtxt->equal(integer_st4, this->astCtxt->bv(0, 1));
6335 auto ib0_st5 = this->astCtxt->equal(integer_st5, this->astCtxt->bv(0, 1));
6336 auto ib0_st6 = this->astCtxt->equal(integer_st6, this->astCtxt->bv(0, 1));
6337 auto ib0_st7 = this->astCtxt->equal(integer_st7, this->astCtxt->bv(0, 1));
6340 auto fa0_st0 = this->astCtxt->equal(fraction_st0, this->astCtxt->bv(0, 63));
6341 auto fa0_st1 = this->astCtxt->equal(fraction_st1, this->astCtxt->bv(0, 63));
6342 auto fa0_st2 = this->astCtxt->equal(fraction_st2, this->astCtxt->bv(0, 63));
6343 auto fa0_st3 = this->astCtxt->equal(fraction_st3, this->astCtxt->bv(0, 63));
6344 auto fa0_st4 = this->astCtxt->equal(fraction_st4, this->astCtxt->bv(0, 63));
6345 auto fa0_st5 = this->astCtxt->equal(fraction_st5, this->astCtxt->bv(0, 63));
6346 auto fa0_st6 = this->astCtxt->equal(fraction_st6, this->astCtxt->bv(0, 63));
6347 auto fa0_st7 = this->astCtxt->equal(fraction_st7, this->astCtxt->bv(0, 63));
6350 auto db_1_0 = this->astCtxt->ite(this->astCtxt->equal(eb_1_0, this->astCtxt->bv(0, 1)),
6351 this->astCtxt->bv(3, 2),
6352 this->astCtxt->ite(ea0_st0,
6353 this->astCtxt->ite(ib0_st0,
6354 this->astCtxt->ite(fa0_st0,
6355 this->astCtxt->bv(1, 2),
6356 this->astCtxt->bv(2, 2)),
6357 this->astCtxt->bv(2, 2)),
6358 this->astCtxt->ite(ena01_st0,
6359 this->astCtxt->ite(ib0_st0,
6360 this->astCtxt->bv(2, 2),
6361 this->astCtxt->bv(0, 2)),
6362 this->astCtxt->bv(2, 2))));
6364 auto db_3_2 = this->astCtxt->ite(this->astCtxt->equal(eb_3_2, this->astCtxt->bv(0, 1)),
6365 this->astCtxt->bv(3, 2),
6366 this->astCtxt->ite(ea0_st1,
6367 this->astCtxt->ite(ib0_st1,
6368 this->astCtxt->ite(fa0_st1,
6369 this->astCtxt->bv(1, 2),
6370 this->astCtxt->bv(2, 2)),
6371 this->astCtxt->bv(2, 2)),
6372 this->astCtxt->ite(ena01_st1,
6373 this->astCtxt->ite(ib0_st1,
6374 this->astCtxt->bv(2, 2),
6375 this->astCtxt->bv(0, 2)),
6376 this->astCtxt->bv(2, 2))));
6378 auto db_5_4 = this->astCtxt->ite(this->astCtxt->equal(eb_5_4, this->astCtxt->bv(0, 1)),
6379 this->astCtxt->bv(3, 2),
6380 this->astCtxt->ite(ea0_st2,
6381 this->astCtxt->ite(ib0_st2,
6382 this->astCtxt->ite(fa0_st2,
6383 this->astCtxt->bv(1, 2),
6384 this->astCtxt->bv(2, 2)),
6385 this->astCtxt->bv(2, 2)),
6386 this->astCtxt->ite(ena01_st2,
6387 this->astCtxt->ite(ib0_st2,
6388 this->astCtxt->bv(2, 2),
6389 this->astCtxt->bv(0, 2)),
6390 this->astCtxt->bv(2, 2))));
6392 auto db_7_6 = this->astCtxt->ite(this->astCtxt->equal(eb_7_6, this->astCtxt->bv(0, 1)),
6393 this->astCtxt->bv(3, 2),
6394 this->astCtxt->ite(ea0_st3,
6395 this->astCtxt->ite(ib0_st3,
6396 this->astCtxt->ite(fa0_st3,
6397 this->astCtxt->bv(1, 2),
6398 this->astCtxt->bv(2, 2)),
6399 this->astCtxt->bv(2, 2)),
6400 this->astCtxt->ite(ena01_st3,
6401 this->astCtxt->ite(ib0_st3,
6402 this->astCtxt->bv(2, 2),
6403 this->astCtxt->bv(0, 2)),
6404 this->astCtxt->bv(2, 2))));
6406 auto db_9_8 = this->astCtxt->ite(this->astCtxt->equal(eb_9_8, this->astCtxt->bv(0, 1)),
6407 this->astCtxt->bv(3, 2),
6408 this->astCtxt->ite(ea0_st4,
6409 this->astCtxt->ite(ib0_st4,
6410 this->astCtxt->ite(fa0_st4,
6411 this->astCtxt->bv(1, 2),
6412 this->astCtxt->bv(2, 2)),
6413 this->astCtxt->bv(2, 2)),
6414 this->astCtxt->ite(ena01_st4,
6415 this->astCtxt->ite(ib0_st4,
6416 this->astCtxt->bv(2, 2),
6417 this->astCtxt->bv(0, 2)),
6418 this->astCtxt->bv(2, 2))));
6420 auto db_11_10 = this->astCtxt->ite(this->astCtxt->equal(eb_11_10, this->astCtxt->bv(0, 1)),
6421 this->astCtxt->bv(3, 2),
6422 this->astCtxt->ite(ea0_st5,
6423 this->astCtxt->ite(ib0_st5,
6424 this->astCtxt->ite(fa0_st5,
6425 this->astCtxt->bv(1, 2),
6426 this->astCtxt->bv(2, 2)),
6427 this->astCtxt->bv(2, 2)),
6428 this->astCtxt->ite(ena01_st5,
6429 this->astCtxt->ite(ib0_st5,
6430 this->astCtxt->bv(2, 2),
6431 this->astCtxt->bv(0, 2)),
6432 this->astCtxt->bv(2, 2))));
6434 auto db_13_12 = this->astCtxt->ite(this->astCtxt->equal(eb_13_12, this->astCtxt->bv(0, 1)),
6435 this->astCtxt->bv(3, 2),
6436 this->astCtxt->ite(ea0_st6,
6437 this->astCtxt->ite(ib0_st6,
6438 this->astCtxt->ite(fa0_st6,
6439 this->astCtxt->bv(1, 2),
6440 this->astCtxt->bv(2, 2)),
6441 this->astCtxt->bv(2, 2)),
6442 this->astCtxt->ite(ena01_st6,
6443 this->astCtxt->ite(ib0_st6,
6444 this->astCtxt->bv(2, 2),
6445 this->astCtxt->bv(0, 2)),
6446 this->astCtxt->bv(2, 2))));
6448 auto db_15_14 = this->astCtxt->ite(this->astCtxt->equal(eb_15_14, this->astCtxt->bv(0, 1)),
6449 this->astCtxt->bv(3, 2),
6450 this->astCtxt->ite(ea0_st7,
6451 this->astCtxt->ite(ib0_st7,
6452 this->astCtxt->ite(fa0_st7,
6453 this->astCtxt->bv(1, 2),
6454 this->astCtxt->bv(2, 2)),
6455 this->astCtxt->bv(2, 2)),
6456 this->astCtxt->ite(ena01_st7,
6457 this->astCtxt->ite(ib0_st7,
6458 this->astCtxt->bv(2, 2),
6459 this->astCtxt->bv(0, 2)),
6460 this->astCtxt->bv(2, 2))));
6463 auto uftw_ast = this->astCtxt->concat(db_15_14,
6464 this->astCtxt->concat(db_13_12,
6465 this->astCtxt->concat(db_11_10,
6466 this->astCtxt->concat(db_9_8,
6467 this->astCtxt->concat(db_7_6,
6468 this->astCtxt->concat(db_5_4,
6469 this->astCtxt->concat(db_3_2, db_1_0)))))));
6474 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, uftw_ast, ftw,
"FXRSTOR64 Updated FTW operation");
6480 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr,
"FXRSTOR64 MXCSR operation");
6481 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask,
"FXRSTOR64 MXCSR_MASK operation");
6500 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10,
"FXRSTOR64 XMM10 operation");
6501 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11,
"FXRSTOR64 XMM11 operation");
6502 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12,
"FXRSTOR64 XMM12 operation");
6503 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13,
"FXRSTOR64 XMM13 operation");
6504 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14,
"FXRSTOR64 XMM14 operation");
6505 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15,
"FXRSTOR64 XMM15 operation");
6508 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw, fcw_addr);
6509 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw, fsw_addr);
6510 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw, ftw_addr);
6511 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop, fop_addr);
6512 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip, fip_addr);
6513 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs, fcs_addr);
6514 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp, fdp_addr);
6515 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds, fds_addr);
6516 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr, mxcsr_addr);
6517 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask, mxcsr_mask_addr);
6518 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0, st0_addr);
6519 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1, st1_addr);
6520 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2, st2_addr);
6521 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3, st3_addr);
6522 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4, st4_addr);
6523 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5, st5_addr);
6524 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6, st6_addr);
6525 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7, st7_addr);
6526 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0, xmm0_addr);
6527 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1, xmm1_addr);
6528 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2, xmm2_addr);
6529 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3, xmm3_addr);
6530 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4, xmm4_addr);
6531 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5, xmm5_addr);
6532 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6, xmm6_addr);
6533 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7, xmm7_addr);
6534 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8, xmm8_addr);
6535 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9, xmm9_addr);
6536 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10, xmm10_addr);
6537 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11, xmm11_addr);
6538 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12, xmm12_addr);
6539 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13, xmm13_addr);
6540 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14, xmm14_addr);
6541 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15, xmm15_addr);
6544 this->controlFlow_s(inst);
6561 if (m512byte & 0xF) {
6597 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw);
6598 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw);
6599 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw);
6600 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop);
6602 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs);
6604 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds);
6605 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr);
6606 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask);
6607 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0);
6608 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1);
6609 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2);
6610 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3);
6611 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4);
6612 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5);
6613 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6);
6614 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7);
6615 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0);
6616 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1);
6617 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2);
6618 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3);
6619 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4);
6620 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5);
6621 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6);
6622 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7);
6623 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
6624 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
6631 auto eb_1_0 = this->astCtxt->ite(
6632 this->astCtxt->equal(this->astCtxt->extract(1, 0, ftw_ast), this->astCtxt->bv(3, 2)),
6633 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6635 auto eb_3_2 = this->astCtxt->ite(
6636 this->astCtxt->equal(this->astCtxt->extract(3, 2, ftw_ast), this->astCtxt->bv(3, 2)),
6637 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6639 auto eb_5_4 = this->astCtxt->ite(
6640 this->astCtxt->equal(this->astCtxt->extract(5, 4, ftw_ast), this->astCtxt->bv(3, 2)),
6641 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6643 auto eb_7_6 = this->astCtxt->ite(
6644 this->astCtxt->equal(this->astCtxt->extract(7, 6, ftw_ast), this->astCtxt->bv(3, 2)),
6645 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6647 auto eb_9_8 = this->astCtxt->ite(
6648 this->astCtxt->equal(this->astCtxt->extract(9, 8, ftw_ast), this->astCtxt->bv(3, 2)),
6649 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6651 auto eb_11_10 = this->astCtxt->ite(
6652 this->astCtxt->equal(this->astCtxt->extract(11, 10, ftw_ast), this->astCtxt->bv(3, 2)),
6653 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6655 auto eb_13_12 = this->astCtxt->ite(
6656 this->astCtxt->equal(this->astCtxt->extract(13, 12, ftw_ast), this->astCtxt->bv(3, 2)),
6657 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6659 auto eb_15_14 = this->astCtxt->ite(
6660 this->astCtxt->equal(this->astCtxt->extract(15, 14, ftw_ast), this->astCtxt->bv(3, 2)),
6661 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6663 auto aftw_ast = this->astCtxt->concat(eb_15_14,
6664 this->astCtxt->concat(eb_13_12,
6665 this->astCtxt->concat(eb_11_10,
6666 this->astCtxt->concat(eb_9_8,
6667 this->astCtxt->concat(eb_7_6,
6668 this->astCtxt->concat(eb_5_4,
6669 this->astCtxt->concat(eb_3_2, eb_1_0)))))));
6700 auto xmm0_orig = this->symbolicEngine->
getOperandAst(xmm0_addr);
6701 auto xmm1_orig = this->symbolicEngine->
getOperandAst(xmm1_addr);
6702 auto xmm2_orig = this->symbolicEngine->
getOperandAst(xmm2_addr);
6703 auto xmm3_orig = this->symbolicEngine->
getOperandAst(xmm3_addr);
6704 auto xmm4_orig = this->symbolicEngine->
getOperandAst(xmm4_addr);
6705 auto xmm5_orig = this->symbolicEngine->
getOperandAst(xmm5_addr);
6706 auto xmm6_orig = this->symbolicEngine->
getOperandAst(xmm6_addr);
6707 auto xmm7_orig = this->symbolicEngine->
getOperandAst(xmm7_addr);
6710 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
6711 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
6712 auto b64 = this->astCtxt->equal(this->astCtxt->bv(is64bits, 1), this->astCtxt->bv(1, 1));
6713 auto is_fast = this->astCtxt->land(this->astCtxt->land(cpl, ffx), b64);
6716 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
6717 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
6718 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
6719 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
6720 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
6721 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
6722 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
6723 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
6728 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, aftw_ast, ftw_addr,
"FXSAVE Abridged FTW operation");
6734 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr_addr,
"FXSAVE MXCSR operation");
6735 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask_addr,
"FXSAVE MXCSR_MASK operation");
6744 auto xmm0_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm0_ast, xmm0_addr,
"FXSAVE XMM0 operation");
6745 auto xmm1_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm1_ast, xmm1_addr,
"FXSAVE XMM1 operation");
6746 auto xmm2_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm2_ast, xmm2_addr,
"FXSAVE XMM2 operation");
6747 auto xmm3_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm3_ast, xmm3_addr,
"FXSAVE XMM3 operation");
6748 auto xmm4_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm4_ast, xmm4_addr,
"FXSAVE XMM4 operation");
6749 auto xmm5_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm5_ast, xmm5_addr,
"FXSAVE XMM5 operation");
6750 auto xmm6_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm6_ast, xmm6_addr,
"FXSAVE XMM6 operation");
6751 auto xmm7_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm7_ast, xmm7_addr,
"FXSAVE XMM7 operation");
6754 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw_addr, fcw);
6755 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw_addr, fsw);
6756 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw_addr, ftw);
6757 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop_addr, fop);
6758 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip_addr, fip);
6759 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs_addr, fcs);
6760 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp_addr, fdp);
6761 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds_addr, fds);
6762 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_addr, mxcsr);
6763 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask_addr, mxcsr_mask);
6764 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0_addr, st0);
6765 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1_addr, st1);
6766 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2_addr, st2);
6767 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3_addr, st3);
6768 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4_addr, st4);
6769 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5_addr, st5);
6770 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6_addr, st6);
6771 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7_addr, st7);
6772 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0_addr, xmm0);
6773 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1_addr, xmm1);
6774 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2_addr, xmm2);
6775 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3_addr, xmm3);
6776 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4_addr, xmm4);
6777 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5_addr, xmm5);
6778 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6_addr, xmm6);
6779 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7_addr, xmm7);
6792 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8);
6793 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9);
6794 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10);
6795 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11);
6796 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12);
6797 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13);
6798 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14);
6799 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15);
6811 auto xmm8_orig = this->symbolicEngine->
getOperandAst(xmm8_addr);
6812 auto xmm9_orig = this->symbolicEngine->
getOperandAst(xmm9_addr);
6813 auto xmm10_orig = this->symbolicEngine->
getOperandAst(xmm10_addr);
6814 auto xmm11_orig = this->symbolicEngine->
getOperandAst(xmm11_addr);
6815 auto xmm12_orig = this->symbolicEngine->
getOperandAst(xmm12_addr);
6816 auto xmm13_orig = this->symbolicEngine->
getOperandAst(xmm13_addr);
6817 auto xmm14_orig = this->symbolicEngine->
getOperandAst(xmm14_addr);
6818 auto xmm15_orig = this->symbolicEngine->
getOperandAst(xmm15_addr);
6821 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
6822 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
6823 auto is_fast = this->astCtxt->land(cpl, ffx);
6826 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
6827 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
6828 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
6829 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
6830 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
6831 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
6832 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
6833 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
6835 auto xmm8_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm8_ast, xmm8_addr,
"FXSAVE XMM8 operation");
6836 auto xmm9_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm9_ast, xmm9_addr,
"FXSAVE XMM9 operation");
6837 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10_addr,
"FXSAVE XMM10 operation");
6838 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11_addr,
"FXSAVE XMM11 operation");
6839 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12_addr,
"FXSAVE XMM12 operation");
6840 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13_addr,
"FXSAVE XMM13 operation");
6841 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14_addr,
"FXSAVE XMM14 operation");
6842 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15_addr,
"FXSAVE XMM15 operation");
6844 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8_addr, xmm8);
6845 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9_addr, xmm9);
6846 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10_addr, xmm10);
6847 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11_addr, xmm11);
6848 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12_addr, xmm12);
6849 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13_addr, xmm13);
6850 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14_addr, xmm14);
6851 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15_addr, xmm15);
6855 this->controlFlow_s(inst);
6866 if (m512byte & 0xF) {
6910 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw);
6911 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw);
6912 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw);
6913 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop);
6914 auto fip_ast = this->symbolicEngine->
getOperandAst(inst, fip);
6915 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs);
6916 auto fdp_ast = this->symbolicEngine->
getOperandAst(inst, fdp);
6917 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds);
6918 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr);
6919 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask);
6920 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0);
6921 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1);
6922 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2);
6923 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3);
6924 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4);
6925 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5);
6926 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6);
6927 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7);
6928 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0);
6929 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1);
6930 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2);
6931 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3);
6932 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4);
6933 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5);
6934 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6);
6935 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7);
6936 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8);
6937 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9);
6938 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10);
6939 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11);
6940 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12);
6941 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13);
6942 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14);
6943 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15);
6944 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
6945 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
6952 auto eb_1_0 = this->astCtxt->ite(
6953 this->astCtxt->equal(this->astCtxt->extract(1, 0, ftw_ast), this->astCtxt->bv(3, 2)),
6954 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6956 auto eb_3_2 = this->astCtxt->ite(
6957 this->astCtxt->equal(this->astCtxt->extract(3, 2, ftw_ast), this->astCtxt->bv(3, 2)),
6958 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6960 auto eb_5_4 = this->astCtxt->ite(
6961 this->astCtxt->equal(this->astCtxt->extract(5, 4, ftw_ast), this->astCtxt->bv(3, 2)),
6962 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6964 auto eb_7_6 = this->astCtxt->ite(
6965 this->astCtxt->equal(this->astCtxt->extract(7, 6, ftw_ast), this->astCtxt->bv(3, 2)),
6966 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6968 auto eb_9_8 = this->astCtxt->ite(
6969 this->astCtxt->equal(this->astCtxt->extract(9, 8, ftw_ast), this->astCtxt->bv(3, 2)),
6970 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6972 auto eb_11_10 = this->astCtxt->ite(
6973 this->astCtxt->equal(this->astCtxt->extract(11, 10, ftw_ast), this->astCtxt->bv(3, 2)),
6974 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6976 auto eb_13_12 = this->astCtxt->ite(
6977 this->astCtxt->equal(this->astCtxt->extract(13, 12, ftw_ast), this->astCtxt->bv(3, 2)),
6978 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6980 auto eb_15_14 = this->astCtxt->ite(
6981 this->astCtxt->equal(this->astCtxt->extract(15, 14, ftw_ast), this->astCtxt->bv(3, 2)),
6982 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6984 auto aftw_ast = this->astCtxt->concat(eb_15_14,
6985 this->astCtxt->concat(eb_13_12,
6986 this->astCtxt->concat(eb_11_10,
6987 this->astCtxt->concat(eb_9_8,
6988 this->astCtxt->concat(eb_7_6,
6989 this->astCtxt->concat(eb_5_4,
6990 this->astCtxt->concat(eb_3_2, eb_1_0)))))));
7029 auto xmm0_orig = this->symbolicEngine->
getOperandAst(xmm0_addr);
7030 auto xmm1_orig = this->symbolicEngine->
getOperandAst(xmm1_addr);
7031 auto xmm2_orig = this->symbolicEngine->
getOperandAst(xmm2_addr);
7032 auto xmm3_orig = this->symbolicEngine->
getOperandAst(xmm3_addr);
7033 auto xmm4_orig = this->symbolicEngine->
getOperandAst(xmm4_addr);
7034 auto xmm5_orig = this->symbolicEngine->
getOperandAst(xmm5_addr);
7035 auto xmm6_orig = this->symbolicEngine->
getOperandAst(xmm6_addr);
7036 auto xmm7_orig = this->symbolicEngine->
getOperandAst(xmm7_addr);
7037 auto xmm8_orig = this->symbolicEngine->
getOperandAst(xmm8_addr);
7038 auto xmm9_orig = this->symbolicEngine->
getOperandAst(xmm9_addr);
7039 auto xmm10_orig = this->symbolicEngine->
getOperandAst(xmm10_addr);
7040 auto xmm11_orig = this->symbolicEngine->
getOperandAst(xmm11_addr);
7041 auto xmm12_orig = this->symbolicEngine->
getOperandAst(xmm12_addr);
7042 auto xmm13_orig = this->symbolicEngine->
getOperandAst(xmm13_addr);
7043 auto xmm14_orig = this->symbolicEngine->
getOperandAst(xmm14_addr);
7044 auto xmm15_orig = this->symbolicEngine->
getOperandAst(xmm15_addr);
7047 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
7048 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
7049 auto is_fast = this->astCtxt->land(cpl, ffx);
7052 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
7053 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
7054 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
7055 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
7056 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
7057 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
7058 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
7059 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
7060 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
7061 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
7062 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
7063 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
7064 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
7065 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
7066 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
7067 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
7072 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, aftw_ast, ftw_addr,
"FXSAVE64 Abridged FTW operation");
7078 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr_addr,
"FXSAVE64 MXCSR operation");
7079 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask_addr,
"FXSAVE64 MXCSR_MASK operation");
7088 auto xmm0_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm0_ast, xmm0_addr,
"FXSAVE64 XMM0 operation");
7089 auto xmm1_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm1_ast, xmm1_addr,
"FXSAVE64 XMM1 operation");
7090 auto xmm2_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm2_ast, xmm2_addr,
"FXSAVE64 XMM2 operation");
7091 auto xmm3_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm3_ast, xmm3_addr,
"FXSAVE64 XMM3 operation");
7092 auto xmm4_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm4_ast, xmm4_addr,
"FXSAVE64 XMM4 operation");
7093 auto xmm5_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm5_ast, xmm5_addr,
"FXSAVE64 XMM5 operation");
7094 auto xmm6_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm6_ast, xmm6_addr,
"FXSAVE64 XMM6 operation");
7095 auto xmm7_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm7_ast, xmm7_addr,
"FXSAVE64 XMM7 operation");
7096 auto xmm8_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm8_ast, xmm8_addr,
"FXSAVE64 XMM8 operation");
7097 auto xmm9_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm9_ast, xmm9_addr,
"FXSAVE64 XMM9 operation");
7098 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10_addr,
"FXSAVE64 XMM10 operation");
7099 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11_addr,
"FXSAVE64 XMM11 operation");
7100 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12_addr,
"FXSAVE64 XMM12 operation");
7101 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13_addr,
"FXSAVE64 XMM13 operation");
7102 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14_addr,
"FXSAVE64 XMM14 operation");
7103 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15_addr,
"FXSAVE64 XMM15 operation");
7106 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw_addr, fcw);
7107 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw_addr, fsw);
7108 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw_addr, ftw);
7109 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop_addr, fop);
7110 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip_addr, fip);
7111 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs_addr, fcs);
7112 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp_addr, fdp);
7113 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds_addr, fds);
7114 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_addr, mxcsr);
7115 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask_addr, mxcsr_mask);
7116 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0_addr, st0);
7117 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1_addr, st1);
7118 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2_addr, st2);
7119 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3_addr, st3);
7120 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4_addr, st4);
7121 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5_addr, st5);
7122 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6_addr, st6);
7123 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7_addr, st7);
7124 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0_addr, xmm0);
7125 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1_addr, xmm1);
7126 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2_addr, xmm2);
7127 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3_addr, xmm3);
7128 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4_addr, xmm4);
7129 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5_addr, xmm5);
7130 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6_addr, xmm6);
7131 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7_addr, xmm7);
7132 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8_addr, xmm8);
7133 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9_addr, xmm9);
7134 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10_addr, xmm10);
7135 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11_addr, xmm11);
7136 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12_addr, xmm12);
7137 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13_addr, xmm13);
7138 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14_addr, xmm14);
7139 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15_addr, xmm15);
7142 this->controlFlow_s(inst);
7150 auto divisor = this->symbolicEngine->
getOperandAst(inst, src);
7158 auto dividend = this->symbolicEngine->
getOperandAst(inst, ax);
7165 auto node = this->astCtxt->concat(
7172 expr->isTainted = this->taintEngine->
taintUnion(ax, src);
7180 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, dx), this->symbolicEngine->getOperandAst(inst, ax));
7189 expr1->isTainted = this->taintEngine->
taintUnion(ax, src);
7193 expr2->isTainted = this->taintEngine->
taintUnion(dx, src);
7201 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, edx), this->symbolicEngine->getOperandAst(inst, eax));
7210 expr1->isTainted = this->taintEngine->
taintUnion(eax, src);
7214 expr2->isTainted = this->taintEngine->
taintUnion(edx, src);
7222 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, rdx), this->symbolicEngine->getOperandAst(inst, rax));
7231 expr1->isTainted = this->taintEngine->
taintUnion(rax, src);
7235 expr2->isTainted = this->taintEngine->
taintUnion(rdx, src);
7242 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
7243 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
7244 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
7245 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
7246 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
7247 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
7250 if (divisor->evaluate() == 0) {
7256 this->controlFlow_s(inst);
7278 expr->isTainted = this->taintEngine->
taintUnion(ax, src);
7279 this->cfImul_s(inst, expr, al, this->astCtxt->bvmul(op1, op2), node);
7280 this->ofImul_s(inst, expr, al, this->astCtxt->bvmul(op1, op2), node);
7290 auto node1 = this->astCtxt->bvmul(op1, op2);
7294 expr1->isTainted = this->taintEngine->
taintUnion(ax, src);
7295 expr2->isTainted = this->taintEngine->
taintUnion(dx, ax);
7296 this->cfImul_s(inst, expr1, ax, node1, node2);
7297 this->ofImul_s(inst, expr1, ax, node1, node2);
7307 auto node1 = this->astCtxt->bvmul(op1, op2);
7311 expr1->isTainted = this->taintEngine->
taintUnion(eax, src);
7312 expr2->isTainted = this->taintEngine->
taintUnion(edx, eax);
7313 this->cfImul_s(inst, expr1, eax, node1, node2);
7314 this->ofImul_s(inst, expr1, eax, node1, node2);
7324 auto node1 = this->astCtxt->bvmul(op1, op2);
7328 expr1->isTainted = this->taintEngine->
taintUnion(rax, src);
7329 expr2->isTainted = this->taintEngine->
taintUnion(rdx, rax);
7330 this->cfImul_s(inst, expr1, rax, node1, node2);
7331 this->ofImul_s(inst, expr1, rax, node1, node2);
7345 auto node1 = this->astCtxt->bvmul(op1, op2);
7346 auto node2 = this->astCtxt->bvmul(this->astCtxt->sx(dst.
getBitSize(), op1), this->astCtxt->sx(src.
getBitSize(), op2));
7348 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
7349 this->cfImul_s(inst, expr, dst, node1, node2);
7350 this->ofImul_s(inst, expr, dst, node1, node2);
7360 auto op3 = this->astCtxt->sx(src1.getBitSize() - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
7361 auto node1 = this->astCtxt->bvmul(op2, op3);
7362 auto node2 = this->astCtxt->bvmul(this->astCtxt->sx(src1.getBitSize(), op2), this->astCtxt->sx(src2.getBitSize(), op3));
7364 expr->isTainted = this->taintEngine->
setTaint(dst, this->taintEngine->
isTainted(src1) | this->taintEngine->isTainted(src2));
7365 this->cfImul_s(inst, expr, dst, node1, node2);
7366 this->ofImul_s(inst, expr, dst, node1, node2);
7373 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
7374 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
7375 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
7376 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
7379 this->controlFlow_s(inst);
7388 auto op2 = this->astCtxt->bv(1, dst.
getBitSize());
7391 auto node = this->astCtxt->bvadd(op1, op2);
7397 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
7400 this->af_s(inst, expr, dst, op1, op2);
7401 this->ofAdd_s(inst, expr, dst, op1, op2);
7402 this->pf_s(inst, expr, dst);
7403 this->sf_s(inst, expr, dst);
7404 this->zf_s(inst, expr, dst);
7407 this->controlFlow_s(inst);
7413 this->controlFlow_s(inst);
7419 this->controlFlow_s(inst);
7433 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7434 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7437 auto node = this->astCtxt->ite(
7438 this->astCtxt->equal(
7439 this->astCtxt->bvand(
7440 this->astCtxt->bvnot(op1),
7441 this->astCtxt->bvnot(op2)
7443 this->astCtxt->bvtrue()
7450 if (op1->evaluate().is_zero() && op2->evaluate().is_zero())
7455 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7470 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7471 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7474 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7480 if (op1->evaluate().is_zero())
7499 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7500 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7503 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7509 if (!op1->evaluate().is_zero())
7530 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7531 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7534 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(op1, op2), this->astCtxt->bvtrue()), op4, op3);
7540 if (!op1->evaluate().is_zero() || !op2->evaluate().is_zero())
7545 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7560 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7561 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7563 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bv(0,
triton::bitsize::word)), op3, op2);
7569 if (!op1->evaluate().is_zero())
7588 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7589 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7592 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7598 if (!op1->evaluate().is_zero())
7617 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7618 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7620 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bv(0,
triton::bitsize::dword)), op3, op2);
7626 if (!op1->evaluate().is_zero())
7649 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7650 auto op5 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7653 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op1, op2), op3), this->astCtxt->bvfalse()), op5, op4);
7659 if ((op1->evaluate().is_zero() == op2->evaluate().is_zero()) && op3->evaluate().is_zero())
7664 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7665 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7682 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7683 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7686 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, op2), op4, op3);
7692 if (op1->evaluate().is_zero() == op2->evaluate().is_zero())
7697 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7714 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7715 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7718 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvxor(op1, op2), this->astCtxt->bvtrue()), op4, op3);
7724 if (op1->evaluate().is_zero() != op2->evaluate().is_zero())
7729 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7748 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7749 auto op5 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7752 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op1, op2), op3), this->astCtxt->bvtrue()), op5, op4);
7758 if ((op1->evaluate().is_zero() != op2->evaluate().is_zero()) || !op3->evaluate().is_zero())
7763 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7764 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7803 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7804 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7807 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7813 if (op1->evaluate().is_zero())
7832 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7833 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7836 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7842 if (op1->evaluate().is_zero())
7861 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7862 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7865 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7871 if (op1->evaluate().is_zero())
7890 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7891 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7894 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7900 if (op1->evaluate().is_zero())
7919 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7920 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7923 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7929 if (!op1->evaluate().is_zero())
7948 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7949 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7952 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7958 if (!op1->evaluate().is_zero())
7977 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7978 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7980 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bv(0,
triton::bitsize::qword)), op3, op2);
7986 if (!op1->evaluate().is_zero())
8005 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
8006 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
8009 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
8015 if (!op1->evaluate().is_zero())
8042 std::vector<triton::ast::SharedAbstractNode> flags;
8045 flags.push_back(op1);
8046 flags.push_back(op2);
8047 flags.push_back(this->astCtxt->bvfalse());
8048 flags.push_back(op3);
8049 flags.push_back(this->astCtxt->bvfalse());
8050 flags.push_back(op4);
8051 flags.push_back(this->astCtxt->bvtrue());
8052 flags.push_back(op5);
8054 auto node = this->astCtxt->concat(flags);
8064 expr->isTainted = this->taintEngine->
taintUnion(dst, src5);
8067 this->controlFlow_s(inst);
8085 this->controlFlow_s(inst);
8103 this->controlFlow_s(inst);
8108 auto& dst = inst.
operands[0].getRegister();
8109 auto& srcDisp = inst.
operands[1].getMemory().getDisplacement();
8110 auto& srcBase = inst.
operands[1].getMemory().getBaseRegister();
8111 auto& srcIndex = inst.
operands[1].getMemory().getIndexRegister();
8112 auto& srcScale = inst.
operands[1].getMemory().getScale();
8117 leaSize = srcBase.getBitSize();
8119 leaSize = srcIndex.getBitSize();
8121 leaSize = srcDisp.getBitSize();
8127 if (leaSize > srcDisp.getBitSize())
8128 op2 = this->astCtxt->zx(leaSize - srcDisp.getBitSize(), op2);
8135 op3 = this->astCtxt->bv(0, leaSize);
8138 if (this->architecture->
isRegisterValid(srcBase) && (this->architecture->getParentRegister(srcBase) == this->architecture->getProgramCounter()))
8139 op3 = this->astCtxt->bvadd(op3, this->astCtxt->bv(inst.
getSize(), leaSize));
8146 op4 = this->astCtxt->bv(0, leaSize);
8150 if (leaSize > srcScale.getBitSize())
8151 op5 = this->astCtxt->zx(leaSize - srcScale.getBitSize(), op5);
8155 auto node = this->astCtxt->bvadd(op2, this->astCtxt->bvadd(op3, this->astCtxt->bvmul(op4, op5)));
8158 node = this->astCtxt->zx(dst.
getBitSize() - leaSize, node);
8161 node = this->astCtxt->extract(dst.
getHigh(), dst.
getLow(), node);
8167 expr->isTainted = this->taintEngine->
setTaint(dst, this->taintEngine->
isTainted(srcBase) | this->taintEngine->isTainted(srcIndex));
8170 this->controlFlow_s(inst);
8207 alignAddStack_s(inst, bp1.getSize());
8210 this->controlFlow_s(inst);
8216 this->controlFlow_s(inst);
8229 this->controlFlow_s(inst);
8235 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8240 auto node2 = this->astCtxt->ite(
8241 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8242 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::byte, index.getBitSize())),
8252 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8255 this->controlFlow_s(inst);
8268 this->controlFlow_s(inst);
8274 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8279 auto node2 = this->astCtxt->ite(
8280 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8291 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8294 this->controlFlow_s(inst);
8307 this->controlFlow_s(inst);
8313 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8318 auto node2 = this->astCtxt->ite(
8319 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8330 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8333 this->controlFlow_s(inst);
8346 this->controlFlow_s(inst);
8352 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8357 auto node2 = this->astCtxt->ite(
8358 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8359 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::word, index.getBitSize())),
8369 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8372 this->controlFlow_s(inst);
8383 auto op2 = this->symbolicEngine->
getOperandAst(inst, count);
8386 auto node1 = this->astCtxt->ite(
8387 this->astCtxt->equal(op2, this->astCtxt->bv(0, op2->getBitvectorSize())),
8396 if (op2->evaluate()) {
8406 auto node2 = this->astCtxt->bvsub(op2, this->astCtxt->bv(1, op2->getBitvectorSize()));
8429 node = this->astCtxt->ite(
8430 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8431 this->astCtxt->bv(bvSize2, bvSize1),
8432 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8433 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8434 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8435 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8436 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8437 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8438 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8439 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8440 this->astCtxt->bv(8, bvSize1))))))))));
8443 node = this->astCtxt->ite(
8444 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8445 this->astCtxt->bv(bvSize2, bvSize1),
8446 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8447 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8448 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8449 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8450 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8451 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8452 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8453 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8454 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 9, bvSize2 - 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
8455 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 10, bvSize2 - 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
8456 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 11, bvSize2 - 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
8457 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 12, bvSize2 - 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
8458 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 13, bvSize2 - 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
8459 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 14, bvSize2 - 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
8460 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 15, bvSize2 - 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
8461 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 16, bvSize2 - 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
8462 this->astCtxt->bv(16, bvSize1))))))))))))))))));
8465 node = this->astCtxt->ite(
8466 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8467 this->astCtxt->bv(bvSize2, bvSize1),
8468 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8469 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8470 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8471 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8472 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8473 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8474 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8475 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8476 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 9, bvSize2 - 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
8477 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 10, bvSize2 - 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
8478 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 11, bvSize2 - 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
8479 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 12, bvSize2 - 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
8480 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 13, bvSize2 - 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
8481 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 14, bvSize2 - 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
8482 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 15, bvSize2 - 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
8483 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 16, bvSize2 - 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
8484 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 17, bvSize2 - 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
8485 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 18, bvSize2 - 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
8486 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 19, bvSize2 - 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
8487 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 20, bvSize2 - 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
8488 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 21, bvSize2 - 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
8489 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 22, bvSize2 - 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
8490 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 23, bvSize2 - 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
8491 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 24, bvSize2 - 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
8492 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 25, bvSize2 - 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
8493 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 26, bvSize2 - 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
8494 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 27, bvSize2 - 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
8495 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 28, bvSize2 - 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
8496 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 29, bvSize2 - 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
8497 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 30, bvSize2 - 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
8498 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 31, bvSize2 - 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
8499 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 32, bvSize2 - 32, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
8500 this->astCtxt->bv(32, bvSize1))))))))))))))))))))))))))))))))));
8503 node = this->astCtxt->ite(
8504 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8505 this->astCtxt->bv(bvSize2, bvSize1),
8506 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8507 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8508 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8509 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8510 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8511 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8512 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8513 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8514 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 9, bvSize2 - 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
8515 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 10, bvSize2 - 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
8516 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 11, bvSize2 - 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
8517 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 12, bvSize2 - 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
8518 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 13, bvSize2 - 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
8519 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 14, bvSize2 - 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
8520 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 15, bvSize2 - 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
8521 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 16, bvSize2 - 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
8522 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 17, bvSize2 - 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
8523 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 18, bvSize2 - 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
8524 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 19, bvSize2 - 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
8525 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 20, bvSize2 - 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
8526 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 21, bvSize2 - 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
8527 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 22, bvSize2 - 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
8528 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 23, bvSize2 - 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
8529 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 24, bvSize2 - 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
8530 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 25, bvSize2 - 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
8531 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 26, bvSize2 - 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
8532 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 27, bvSize2 - 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
8533 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 28, bvSize2 - 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
8534 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 29, bvSize2 - 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
8535 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 30, bvSize2 - 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
8536 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 31, bvSize2 - 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
8537 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 32, bvSize2 - 32, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
8538 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 33, bvSize2 - 33, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
8539 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 34, bvSize2 - 34, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
8540 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 35, bvSize2 - 35, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
8541 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 36, bvSize2 - 36, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
8542 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 37, bvSize2 - 37, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
8543 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 38, bvSize2 - 38, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
8544 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 39, bvSize2 - 39, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
8545 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 40, bvSize2 - 40, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
8546 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 41, bvSize2 - 41, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
8547 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 42, bvSize2 - 42, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
8548 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 43, bvSize2 - 43, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
8549 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 44, bvSize2 - 44, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
8550 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 45, bvSize2 - 45, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
8551 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 46, bvSize2 - 46, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
8552 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 47, bvSize2 - 47, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
8553 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 48, bvSize2 - 48, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
8554 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 49, bvSize2 - 49, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
8555 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 50, bvSize2 - 50, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
8556 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 51, bvSize2 - 51, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
8557 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 52, bvSize2 - 52, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
8558 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 53, bvSize2 - 53, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
8559 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 54, bvSize2 - 54, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
8560 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 55, bvSize2 - 55, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
8561 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 56, bvSize2 - 56, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
8562 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 57, bvSize2 - 57, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
8563 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 58, bvSize2 - 58, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
8564 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 59, bvSize2 - 59, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
8565 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 60, bvSize2 - 60, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
8566 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 61, bvSize2 - 61, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
8567 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 62, bvSize2 - 62, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
8568 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 63, bvSize2 - 63, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
8569 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 64, bvSize2 - 64, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
8570 this->astCtxt->bv(64, bvSize1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))));
8583 this->cfLzcnt_s(inst, expr, src, op1);
8584 this->zf_s(inst, expr, src);
8587 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
8588 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
8589 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
8590 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
8593 this->controlFlow_s(inst);
8605 this->controlFlow_s(inst);
8628 if (
id >= triton::arch::ID_REG_X86_CS &&
id <= triton::arch::ID_REG_X86_SS) {
8629 node = this->astCtxt->extract(dst.
getBitSize()-1, 0, node);
8631 if (
id >= triton::arch::ID_REG_X86_CR0 &&
id <= triton::arch::ID_REG_X86_CR15) {
8641 if (
id >= triton::arch::ID_REG_X86_CS &&
id <= triton::arch::ID_REG_X86_SS) {
8644 if (
id >= triton::arch::ID_REG_X86_CR0 &&
id <= triton::arch::ID_REG_X86_CR15) {
8657 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
8658 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
8659 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
8660 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
8661 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
8662 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
8666 this->controlFlow_s(inst);
8684 this->controlFlow_s(inst);
8702 this->controlFlow_s(inst);
8720 this->controlFlow_s(inst);
8732 std::vector<triton::ast::SharedAbstractNode> exprs;
8733 for (
size_t i = 0; i < src.
getSize(); ++i) {
8738 auto node = this->astCtxt->concat(exprs);
8747 this->controlFlow_s(inst);
8783 this->updateFTW(inst, expr);
8790 this->controlFlow_s(inst);
8811 this->controlFlow_s(inst);
8832 this->controlFlow_s(inst);
8850 this->controlFlow_s(inst);
8868 this->controlFlow_s(inst);
8881 auto node = this->astCtxt->concat(
8890 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8893 this->controlFlow_s(inst);
8910 node = this->astCtxt->concat(
8925 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8928 this->controlFlow_s(inst);
8945 node = this->astCtxt->concat(
8960 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8963 this->controlFlow_s(inst);
8976 auto node = this->astCtxt->concat(
8985 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8988 this->controlFlow_s(inst);
9005 node = this->astCtxt->concat(
9020 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9023 this->controlFlow_s(inst);
9040 node = this->astCtxt->concat(
9055 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9058 this->controlFlow_s(inst);
9070 auto node = this->astCtxt->zx(30,
9071 this->astCtxt->concat(
9072 this->astCtxt->extract(127, 127, op2),
9073 this->astCtxt->extract(63, 63, op2)
9084 this->controlFlow_s(inst);
9096 std::vector<triton::ast::SharedAbstractNode> signs;
9099 signs.push_back(this->astCtxt->extract(127, 127, op2));
9100 signs.push_back(this->astCtxt->extract(95, 95, op2));
9101 signs.push_back(this->astCtxt->extract(63, 63, op2));
9102 signs.push_back(this->astCtxt->extract(31, 31, op2));
9104 auto node = this->astCtxt->zx(28, this->astCtxt->concat(signs));
9113 this->controlFlow_s(inst);
9131 this->controlFlow_s(inst);
9149 this->controlFlow_s(inst);
9167 this->controlFlow_s(inst);
9185 this->controlFlow_s(inst);
9203 this->controlFlow_s(inst);
9214 std::vector<triton::ast::SharedAbstractNode> bytes;
9217 bytes.push_back(this->astCtxt->extract(127, 96, op2));
9218 bytes.push_back(this->astCtxt->extract(127, 96, op2));
9219 bytes.push_back(this->astCtxt->extract(63, 32, op2));
9220 bytes.push_back(this->astCtxt->extract(63, 32, op2));
9222 auto node = this->astCtxt->concat(bytes);
9231 this->controlFlow_s(inst);
9242 std::vector<triton::ast::SharedAbstractNode> bytes;
9245 bytes.push_back(this->astCtxt->extract(95, 64, op2));
9246 bytes.push_back(this->astCtxt->extract(95, 64, op2));
9247 bytes.push_back(this->astCtxt->extract(31, 0, op2));
9248 bytes.push_back(this->astCtxt->extract(31, 0, op2));
9250 auto node = this->astCtxt->concat(bytes);
9259 this->controlFlow_s(inst);
9279 node = this->astCtxt->concat(
9305 this->updateFTW(inst, expr);
9310 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9315 this->controlFlow_s(inst);
9337 this->controlFlow_s(inst);
9351 this->controlFlow_s(inst);
9357 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9358 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9363 auto node2 = this->astCtxt->ite(
9364 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9365 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::byte, index1.getBitSize())),
9366 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::byte, index1.getBitSize()))
9368 auto node3 = this->astCtxt->ite(
9369 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9370 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::byte, index2.getBitSize())),
9371 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::byte, index2.getBitSize()))
9381 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9382 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9385 this->controlFlow_s(inst);
9399 this->controlFlow_s(inst);
9411 auto node = this->astCtxt->concat(
9412 this->astCtxt->extract(127, 64, op2),
9413 this->astCtxt->extract(63, 0, op1)
9425 auto node = this->astCtxt->extract(63, 0, op1);
9434 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9435 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9440 auto node2 = this->astCtxt->ite(
9441 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9445 auto node3 = this->astCtxt->ite(
9446 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9458 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9459 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9463 this->controlFlow_s(inst);
9481 this->controlFlow_s(inst);
9499 this->controlFlow_s(inst);
9517 node = this->astCtxt->concat(upper, node);
9528 this->controlFlow_s(inst);
9542 this->controlFlow_s(inst);
9548 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9549 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9554 auto node2 = this->astCtxt->ite(
9555 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9559 auto node3 = this->astCtxt->ite(
9560 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9572 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9573 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9576 this->controlFlow_s(inst);
9590 this->controlFlow_s(inst);
9596 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9597 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9602 auto node2 = this->astCtxt->ite(
9603 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9604 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::word, index1.getBitSize())),
9605 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::word, index1.getBitSize()))
9607 auto node3 = this->astCtxt->ite(
9608 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9609 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::word, index2.getBitSize())),
9610 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::word, index2.getBitSize()))
9620 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9621 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9624 this->controlFlow_s(inst);
9645 this->controlFlow_s(inst);
9666 this->controlFlow_s(inst);
9687 this->controlFlow_s(inst);
9694 switch (src2.getSize()) {
9708 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
9711 this->cfMul_s(inst, expr, src2, ah);
9712 this->ofMul_s(inst, expr, src2, ah);
9725 auto ax = this->astCtxt->bvmul(op1, op2);
9728 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9734 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9735 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9737 this->cfMul_s(inst, expr2, src2, dx);
9738 this->ofMul_s(inst, expr2, src2, dx);
9751 auto eax = this->astCtxt->bvmul(op1, op2);
9754 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9760 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9761 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9763 this->cfMul_s(inst, expr2, src2, edx);
9764 this->ofMul_s(inst, expr2, src2, edx);
9778 auto rax = this->astCtxt->bvmul(op1, op2);
9781 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9787 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9788 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9790 this->cfMul_s(inst, expr2, src2, rdx);
9791 this->ofMul_s(inst, expr2, src2, rdx);
9798 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
9799 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
9800 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
9801 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
9804 this->controlFlow_s(inst);
9809 switch (inst.
operands[0].getSize()) {
9824 auto node1 = this->astCtxt->bvmul(op1, op2);
9832 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9833 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9835 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src1);
9836 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9853 auto node1 = this->astCtxt->bvmul(op1, op2);
9861 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9862 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9864 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src1);
9865 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9872 this->controlFlow_s(inst);
9883 auto node = this->astCtxt->bvneg(op1);
9889 expr->isTainted = this->taintEngine->
taintUnion(src, src);
9892 this->afNeg_s(inst, expr, src, op1);
9893 this->cfNeg_s(inst, expr, src, op1);
9894 this->ofNeg_s(inst, expr, src, op1);
9895 this->pf_s(inst, expr, src);
9896 this->sf_s(inst, expr, src);
9897 this->zf_s(inst, expr, src);
9900 this->controlFlow_s(inst);
9906 this->controlFlow_s(inst);
9917 auto node = this->astCtxt->bvnot(op1);
9923 expr->isTainted = this->taintEngine->
taintUnion(src, src);
9926 this->controlFlow_s(inst);
9939 auto node = this->astCtxt->bvor(op1, op2);
9945 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9948 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
9949 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
9950 this->pf_s(inst, expr, dst);
9951 this->sf_s(inst, expr, dst);
9952 this->zf_s(inst, expr, dst);
9955 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
9958 this->controlFlow_s(inst);
9971 auto node = this->astCtxt->bvor(op1, op2);
9977 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9980 this->controlFlow_s(inst);
9993 auto node = this->astCtxt->bvor(op1, op2);
9999 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10002 this->controlFlow_s(inst);
10015 std::vector<triton::ast::SharedAbstractNode> pck;
10018 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
10023 auto signed_word = this->astCtxt->extract(high, low, ops[i]);
10024 pck.push_back(this->astCtxt->ite(
10027 this->astCtxt->ite(
10035 auto node = this->astCtxt->concat(pck);
10041 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10044 this->controlFlow_s(inst);
10057 std::vector<triton::ast::SharedAbstractNode> pck;
10060 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
10066 auto signed_dword = this->astCtxt->extract(high, low, ops[idx]);
10067 pck.push_back(this->astCtxt->ite(
10070 this->astCtxt->ite(
10078 auto node = this->astCtxt->concat(pck);
10084 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10087 this->controlFlow_s(inst);
10100 std::vector<triton::ast::SharedAbstractNode> pck;
10103 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
10108 auto signed_word = this->astCtxt->extract(high, low, ops[i]);
10109 pck.push_back(this->astCtxt->ite(
10112 this->astCtxt->ite(
10120 auto node = this->astCtxt->concat(pck);
10126 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10129 this->controlFlow_s(inst);
10142 std::vector<triton::ast::SharedAbstractNode> packed;
10143 packed.reserve(16);
10149 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 120, op1), this->astCtxt->extract(127, 120, op2)));
10150 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(119, 112, op1), this->astCtxt->extract(119, 112, op2)));
10151 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(111, 104, op1), this->astCtxt->extract(111, 104, op2)));
10152 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(103, 96, op1), this->astCtxt->extract(103, 96, op2)));
10153 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(95, 88, op1), this->astCtxt->extract(95, 88, op2)));
10154 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(87, 80, op1), this->astCtxt->extract(87, 80, op2)));
10155 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(79, 72, op1), this->astCtxt->extract(79, 72, op2)));
10156 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(71, 64, op1), this->astCtxt->extract(71, 64, op2)));
10160 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 56, op1), this->astCtxt->extract(63, 56, op2)));
10161 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(55, 48, op1), this->astCtxt->extract(55, 48, op2)));
10162 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(47, 40, op1), this->astCtxt->extract(47, 40, op2)));
10163 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(39, 32, op1), this->astCtxt->extract(39, 32, op2)));
10164 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(31, 24, op1), this->astCtxt->extract(31, 24, op2)));
10165 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(23, 16, op1), this->astCtxt->extract(23, 16, op2)));
10166 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(15, 8, op1), this->astCtxt->extract(15, 8, op2)));
10167 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(7, 0, op1), this->astCtxt->extract(7, 0, op2)));
10175 auto node = this->astCtxt->concat(packed);
10182 this->updateFTW(inst, expr);
10186 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10189 this->controlFlow_s(inst);
10202 std::vector<triton::ast::SharedAbstractNode> packed;
10209 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(127, 96, op2)));
10210 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(95, 64, op1), this->astCtxt->extract(95, 64, op2)));
10214 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(63, 32, op2)));
10215 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
10223 auto node = this->astCtxt->concat(packed);
10230 this->updateFTW(inst, expr);
10234 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10237 this->controlFlow_s(inst);
10250 std::vector<triton::ast::SharedAbstractNode> packed;
10257 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(127, 64, op2)));
10261 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 0, op1), this->astCtxt->extract(63, 0, op2)));
10269 auto node = this->astCtxt->concat(packed);
10276 this->updateFTW(inst, expr);
10280 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10283 this->controlFlow_s(inst);
10296 std::vector<triton::ast::SharedAbstractNode> packed;
10303 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(127, 112, op2)));
10304 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(111, 96, op2)));
10305 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(95, 80, op1), this->astCtxt->extract(95, 80, op2)));
10306 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(79, 64, op1), this->astCtxt->extract(79, 64, op2)));
10310 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(63, 48, op2)));
10311 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(47, 32, op2)));
10312 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(31, 16, op2)));
10313 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
10321 auto node = this->astCtxt->concat(packed);
10328 this->updateFTW(inst, expr);
10332 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10335 this->controlFlow_s(inst);
10347 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10348 auto op3 = this->astCtxt->zx(size - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
10351 auto node = this->astCtxt->extract(
10353 this->astCtxt->bvlshr(
10354 this->astCtxt->concat(op1, op2),
10355 this->astCtxt->bvmul(
10356 this->astCtxt->ite(
10357 this->astCtxt->bvuge(op3, this->astCtxt->bv(2 * dst.
getSize(), size)),
10358 this->astCtxt->bv(2 * dst.
getSize(), size),
10367 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
10370 this->controlFlow_s(inst);
10383 auto node = this->astCtxt->bvand(op1, op2);
10389 this->updateFTW(inst, expr);
10392 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10395 this->controlFlow_s(inst);
10408 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op1), op2);
10414 this->updateFTW(inst, expr);
10417 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10420 this->controlFlow_s(inst);
10426 this->controlFlow_s(inst);
10439 std::vector<triton::ast::SharedAbstractNode> pck;
10447 this->astCtxt->bvlshr(
10448 this->astCtxt->bvadd(
10449 this->astCtxt->bvadd(
10450 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op1)),
10451 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op2))
10461 auto node = this->astCtxt->concat(pck);
10467 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10470 this->controlFlow_s(inst);
10483 std::vector<triton::ast::SharedAbstractNode> pck;
10491 this->astCtxt->bvlshr(
10492 this->astCtxt->bvadd(
10493 this->astCtxt->bvadd(
10494 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op1)),
10495 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op2))
10505 auto node = this->astCtxt->concat(pck);
10511 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10514 this->controlFlow_s(inst);
10527 std::vector<triton::ast::SharedAbstractNode> pck;
10533 pck.push_back(this->astCtxt->ite(
10534 this->astCtxt->equal(
10535 this->astCtxt->extract(high, low, op1),
10536 this->astCtxt->extract(high, low, op2)),
10542 auto node = this->astCtxt->concat(pck);
10548 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10551 this->controlFlow_s(inst);
10564 std::vector<triton::ast::SharedAbstractNode> pck;
10570 pck.push_back(this->astCtxt->ite(
10571 this->astCtxt->equal(
10572 this->astCtxt->extract(high, low, op1),
10573 this->astCtxt->extract(high, low, op2)),
10579 auto node = this->astCtxt->concat(pck);
10585 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10588 this->controlFlow_s(inst);
10601 std::vector<triton::ast::SharedAbstractNode> pck;
10607 pck.push_back(this->astCtxt->ite(
10608 this->astCtxt->equal(
10609 this->astCtxt->extract(high, low, op1),
10610 this->astCtxt->extract(high, low, op2)),
10616 auto node = this->astCtxt->concat(pck);
10622 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10625 this->controlFlow_s(inst);
10638 std::vector<triton::ast::SharedAbstractNode> pck;
10644 pck.push_back(this->astCtxt->ite(
10645 this->astCtxt->bvsgt(
10646 this->astCtxt->extract(high, low, op1),
10647 this->astCtxt->extract(high, low, op2)),
10653 auto node = this->astCtxt->concat(pck);
10659 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10662 this->controlFlow_s(inst);
10675 std::vector<triton::ast::SharedAbstractNode> pck;
10681 pck.push_back(this->astCtxt->ite(
10682 this->astCtxt->bvsgt(
10683 this->astCtxt->extract(high, low, op1),
10684 this->astCtxt->extract(high, low, op2)),
10690 auto node = this->astCtxt->concat(pck);
10696 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10699 this->controlFlow_s(inst);
10712 std::vector<triton::ast::SharedAbstractNode> pck;
10718 pck.push_back(this->astCtxt->ite(
10719 this->astCtxt->bvsgt(
10720 this->astCtxt->extract(high, low, op1),
10721 this->astCtxt->extract(high, low, op2)),
10727 auto node = this->astCtxt->concat(pck);
10733 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10736 this->controlFlow_s(inst);
10749 std::vector<triton::ast::SharedAbstractNode> pck;
10755 pck.push_back(this->astCtxt->ite(
10756 this->astCtxt->bvsle(
10757 this->astCtxt->extract(high, low, op1),
10758 this->astCtxt->extract(high, low, op2)),
10759 this->astCtxt->extract(high, low, op2),
10760 this->astCtxt->extract(high, low, op1))
10764 auto node = this->astCtxt->concat(pck);
10770 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10773 this->controlFlow_s(inst);
10784 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10785 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10788 this->astCtxt->bvlshr(
10801 this->controlFlow_s(inst);
10812 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10813 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10816 this->astCtxt->bvlshr(
10829 this->controlFlow_s(inst);
10840 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10841 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10844 this->astCtxt->bvlshr(
10857 this->controlFlow_s(inst);
10882 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10883 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10886 this->astCtxt->bvlshr(
10899 this->controlFlow_s(inst);
10910 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10911 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10917 mask = mask << (sel * 8);
10920 auto temp = this->astCtxt->bvand(
10921 this->astCtxt->bvshl(
10922 this->astCtxt->zx(120, this->astCtxt->extract(7, 0, op2)),
10923 this->astCtxt->bv(sel * 8, 128)
10925 this->astCtxt->bv(mask, 128)
10929 auto node = this->astCtxt->bvor(
10930 this->astCtxt->bvand(
10932 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
10941 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
10944 this->controlFlow_s(inst);
10955 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10956 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10962 mask = mask << (sel * 32);
10965 auto temp = this->astCtxt->bvand(
10966 this->astCtxt->bvshl(
10967 this->astCtxt->zx(96, this->astCtxt->extract(31, 0, op2)),
10968 this->astCtxt->bv(sel * 32, 128)
10970 this->astCtxt->bv(mask, 128)
10974 auto node = this->astCtxt->bvor(
10975 this->astCtxt->bvand(
10977 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
10986 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
10989 this->controlFlow_s(inst);
11000 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
11001 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
11007 mask = mask << (sel * 64);
11010 auto temp = this->astCtxt->bvand(
11011 this->astCtxt->bvshl(
11012 this->astCtxt->zx(64, this->astCtxt->extract(63, 0, op2)),
11013 this->astCtxt->bv(sel * 64, 128)
11015 this->astCtxt->bv(mask, 128)
11019 auto node = this->astCtxt->bvor(
11020 this->astCtxt->bvand(
11022 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
11031 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
11034 this->controlFlow_s(inst);
11047 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
11048 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
11064 case 1: mask = mask << 16;
break;
11065 case 2: mask = mask << 32;
break;
11066 case 3: mask = mask << 48;
break;
11088 case 1: mask = mask << 16;
break;
11089 case 2: mask = mask << 32;
break;
11090 case 3: mask = mask << 48;
break;
11091 case 4: mask = mask << 64;
break;
11092 case 5: mask = mask << 80;
break;
11093 case 6: mask = mask << 96;
break;
11094 case 7: mask = mask << 112;
break;
11099 auto temp = this->astCtxt->bvand(
11100 this->astCtxt->bvshl(
11101 this->astCtxt->zx(112, this->astCtxt->extract(15, 0, op2)),
11102 this->astCtxt->bv(sel * 16, 128)
11104 this->astCtxt->bv(mask, 128)
11108 auto node = this->astCtxt->bvor(
11109 this->astCtxt->bvand(
11111 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
11120 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
11123 this->controlFlow_s(inst);
11136 std::vector<triton::ast::SharedAbstractNode> pck;
11142 auto node1 = this->astCtxt->bvmul(
11148 auto node2 = this->astCtxt->bvmul(
11152 pck.push_back(this->astCtxt->bvadd(node1, node2));
11155 auto node = this->astCtxt->concat(pck);
11161 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11164 this->controlFlow_s(inst);
11177 std::vector<triton::ast::SharedAbstractNode> pck;
11183 pck.push_back(this->astCtxt->ite(
11184 this->astCtxt->bvsle(
11185 this->astCtxt->extract(high, low, op1),
11186 this->astCtxt->extract(high, low, op2)),
11187 this->astCtxt->extract(high, low, op2),
11188 this->astCtxt->extract(high, low, op1))
11192 auto node = this->astCtxt->concat(pck);
11198 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11201 this->controlFlow_s(inst);
11214 std::vector<triton::ast::SharedAbstractNode> pck;
11220 pck.push_back(this->astCtxt->ite(
11221 this->astCtxt->bvsle(
11222 this->astCtxt->extract(high, low, op1),
11223 this->astCtxt->extract(high, low, op2)),
11224 this->astCtxt->extract(high, low, op2),
11225 this->astCtxt->extract(high, low, op1))
11229 auto node = this->astCtxt->concat(pck);
11235 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11238 this->controlFlow_s(inst);
11251 std::vector<triton::ast::SharedAbstractNode> pck;
11257 pck.push_back(this->astCtxt->ite(
11258 this->astCtxt->bvule(
11259 this->astCtxt->extract(high, low, op1),
11260 this->astCtxt->extract(high, low, op2)),
11261 this->astCtxt->extract(high, low, op2),
11262 this->astCtxt->extract(high, low, op1))
11266 auto node = this->astCtxt->concat(pck);
11272 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11275 this->controlFlow_s(inst);
11288 std::vector<triton::ast::SharedAbstractNode> pck;
11294 pck.push_back(this->astCtxt->ite(
11295 this->astCtxt->bvule(
11296 this->astCtxt->extract(high, low, op1),
11297 this->astCtxt->extract(high, low, op2)),
11298 this->astCtxt->extract(high, low, op2),
11299 this->astCtxt->extract(high, low, op1))
11303 auto node = this->astCtxt->concat(pck);
11309 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11312 this->controlFlow_s(inst);
11325 std::vector<triton::ast::SharedAbstractNode> pck;
11331 pck.push_back(this->astCtxt->ite(
11332 this->astCtxt->bvule(
11333 this->astCtxt->extract(high, low, op1),
11334 this->astCtxt->extract(high, low, op2)),
11335 this->astCtxt->extract(high, low, op2),
11336 this->astCtxt->extract(high, low, op1))
11340 auto node = this->astCtxt->concat(pck);
11346 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11349 this->controlFlow_s(inst);
11362 std::vector<triton::ast::SharedAbstractNode> pck;
11368 pck.push_back(this->astCtxt->ite(
11369 this->astCtxt->bvsge(
11370 this->astCtxt->extract(high, low, op1),
11371 this->astCtxt->extract(high, low, op2)),
11372 this->astCtxt->extract(high, low, op2),
11373 this->astCtxt->extract(high, low, op1))
11377 auto node = this->astCtxt->concat(pck);
11383 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11386 this->controlFlow_s(inst);
11399 std::vector<triton::ast::SharedAbstractNode> pck;
11405 pck.push_back(this->astCtxt->ite(
11406 this->astCtxt->bvsge(
11407 this->astCtxt->extract(high, low, op1),
11408 this->astCtxt->extract(high, low, op2)),
11409 this->astCtxt->extract(high, low, op2),
11410 this->astCtxt->extract(high, low, op1))
11414 auto node = this->astCtxt->concat(pck);
11420 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11423 this->controlFlow_s(inst);
11436 std::vector<triton::ast::SharedAbstractNode> pck;
11442 pck.push_back(this->astCtxt->ite(
11443 this->astCtxt->bvsge(
11444 this->astCtxt->extract(high, low, op1),
11445 this->astCtxt->extract(high, low, op2)),
11446 this->astCtxt->extract(high, low, op2),
11447 this->astCtxt->extract(high, low, op1))
11451 auto node = this->astCtxt->concat(pck);
11457 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11460 this->controlFlow_s(inst);
11473 std::vector<triton::ast::SharedAbstractNode> pck;
11479 pck.push_back(this->astCtxt->ite(
11480 this->astCtxt->bvuge(
11481 this->astCtxt->extract(high, low, op1),
11482 this->astCtxt->extract(high, low, op2)),
11483 this->astCtxt->extract(high, low, op2),
11484 this->astCtxt->extract(high, low, op1))
11488 auto node = this->astCtxt->concat(pck);
11494 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11497 this->controlFlow_s(inst);
11510 std::vector<triton::ast::SharedAbstractNode> pck;
11516 pck.push_back(this->astCtxt->ite(
11517 this->astCtxt->bvuge(
11518 this->astCtxt->extract(high, low, op1),
11519 this->astCtxt->extract(high, low, op2)),
11520 this->astCtxt->extract(high, low, op2),
11521 this->astCtxt->extract(high, low, op1))
11525 auto node = this->astCtxt->concat(pck);
11531 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11534 this->controlFlow_s(inst);
11547 std::vector<triton::ast::SharedAbstractNode> pck;
11553 pck.push_back(this->astCtxt->ite(
11554 this->astCtxt->bvuge(
11555 this->astCtxt->extract(high, low, op1),
11556 this->astCtxt->extract(high, low, op2)),
11557 this->astCtxt->extract(high, low, op2),
11558 this->astCtxt->extract(high, low, op1))
11562 auto node = this->astCtxt->concat(pck);
11568 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11571 this->controlFlow_s(inst);
11583 std::vector<triton::ast::SharedAbstractNode> mskb;
11588 mskb.push_back(this->astCtxt->extract(127, 127, op2));
11589 mskb.push_back(this->astCtxt->extract(119, 119, op2));
11590 mskb.push_back(this->astCtxt->extract(111, 111, op2));
11591 mskb.push_back(this->astCtxt->extract(103, 103, op2));
11592 mskb.push_back(this->astCtxt->extract(95, 95, op2));
11593 mskb.push_back(this->astCtxt->extract(87, 87, op2));
11594 mskb.push_back(this->astCtxt->extract(79, 79, op2));
11595 mskb.push_back(this->astCtxt->extract(71, 71, op2));
11598 mskb.push_back(this->astCtxt->extract(63, 63, op2));
11599 mskb.push_back(this->astCtxt->extract(55, 55, op2));
11600 mskb.push_back(this->astCtxt->extract(47, 47, op2));
11601 mskb.push_back(this->astCtxt->extract(39, 39, op2));
11602 mskb.push_back(this->astCtxt->extract(31, 31, op2));
11603 mskb.push_back(this->astCtxt->extract(23, 23, op2));
11604 mskb.push_back(this->astCtxt->extract(15, 15, op2));
11605 mskb.push_back(this->astCtxt->extract(7, 7, op2));
11608 auto node = this->astCtxt->zx(
11610 this->astCtxt->concat(mskb)
11620 this->controlFlow_s(inst);
11632 std::vector<triton::ast::SharedAbstractNode> pck;
11640 auto node = this->astCtxt->concat(pck);
11649 this->controlFlow_s(inst);
11661 std::vector<triton::ast::SharedAbstractNode> pck;
11667 auto node = this->astCtxt->concat(pck);
11676 this->controlFlow_s(inst);
11688 std::vector<triton::ast::SharedAbstractNode> pck;
11700 auto node = this->astCtxt->concat(pck);
11709 this->controlFlow_s(inst);
11721 std::vector<triton::ast::SharedAbstractNode> pck;
11727 auto node = this->astCtxt->concat(pck);
11736 this->controlFlow_s(inst);
11748 std::vector<triton::ast::SharedAbstractNode> pck;
11756 auto node = this->astCtxt->concat(pck);
11765 this->controlFlow_s(inst);
11777 std::vector<triton::ast::SharedAbstractNode> pck;
11783 auto node = this->astCtxt->concat(pck);
11792 this->controlFlow_s(inst);
11804 std::vector<triton::ast::SharedAbstractNode> pck;
11812 auto node = this->astCtxt->concat(pck);
11821 this->controlFlow_s(inst);
11833 std::vector<triton::ast::SharedAbstractNode> pck;
11839 auto node = this->astCtxt->concat(pck);
11848 this->controlFlow_s(inst);
11860 std::vector<triton::ast::SharedAbstractNode> pck;
11872 auto node = this->astCtxt->concat(pck);
11881 this->controlFlow_s(inst);
11893 std::vector<triton::ast::SharedAbstractNode> pck;
11899 auto node = this->astCtxt->concat(pck);
11908 this->controlFlow_s(inst);
11920 std::vector<triton::ast::SharedAbstractNode> pck;
11928 auto node = this->astCtxt->concat(pck);
11937 this->controlFlow_s(inst);
11949 std::vector<triton::ast::SharedAbstractNode> pck;
11955 auto node = this->astCtxt->concat(pck);
11964 this->controlFlow_s(inst);
11977 std::vector<triton::ast::SharedAbstractNode> pck;
11986 pck.push_back(node);
11988 auto node = this->astCtxt->concat(pck);
11994 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11997 this->controlFlow_s(inst);
12010 std::vector<triton::ast::SharedAbstractNode> pck;
12019 pck.push_back(node);
12021 auto node = this->astCtxt->concat(pck);
12027 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12030 this->controlFlow_s(inst);
12043 std::vector<triton::ast::SharedAbstractNode> pck;
12052 pck.push_back(node);
12054 auto node = this->astCtxt->concat(pck);
12060 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12063 this->controlFlow_s(inst);
12081 node = this->astCtxt->bvmul(n1, n2);
12086 std::vector<triton::ast::SharedAbstractNode> pck;
12095 pck.push_back(this->astCtxt->bvmul(n3, n4));
12096 pck.push_back(this->astCtxt->bvmul(n1, n2));
12098 node = this->astCtxt->concat(pck);
12110 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12113 this->controlFlow_s(inst);
12127 auto node = this->astCtxt->bv(0, dst.
getBitSize());
12129 node = this->astCtxt->bvadd(
12131 this->astCtxt->zx(dst.
getBitSize() - 1, this->astCtxt->extract(i, i, op2))
12142 this->controlFlow_s(inst);
12147 bool stackRelative =
false;
12169 if (this->architecture->
isRegisterValid(base) && this->architecture->getParentRegister(base) == stack) {
12171 alignAddStack_s(inst, src.
getSize());
12174 stackRelative =
true;
12185 stackRelative =
true;
12196 if (!stackRelative)
12197 alignAddStack_s(inst, src.
getSize());
12200 this->controlFlow_s(inst);
12224 auto node1 = this->symbolicEngine->
getOperandAst(inst, src1);
12225 auto node2 = this->symbolicEngine->
getOperandAst(inst, src2);
12226 auto node3 = this->symbolicEngine->
getOperandAst(inst, src3);
12227 auto node4 = this->symbolicEngine->
getOperandAst(inst, src4);
12228 auto node5 = this->symbolicEngine->
getOperandAst(inst, src5);
12229 auto node6 = this->symbolicEngine->
getOperandAst(inst, src6);
12230 auto node7 = this->symbolicEngine->
getOperandAst(inst, src7);
12251 alignAddStack_s(inst, stack.getSize() * 8);
12254 this->controlFlow_s(inst);
12277 auto node1 = this->astCtxt->extract(0, 0, op1);
12278 auto node2 = this->astCtxt->extract(2, 2, op1);
12279 auto node3 = this->astCtxt->extract(4, 4, op1);
12280 auto node4 = this->astCtxt->extract(6, 6, op1);
12281 auto node5 = this->astCtxt->extract(7, 7, op1);
12282 auto node6 = this->astCtxt->extract(8, 8, op1);
12283 auto node7 = this->astCtxt->bvtrue();
12284 auto node8 = this->astCtxt->extract(10, 10, op1);
12285 auto node9 = this->astCtxt->extract(11, 11, op1);
12287 auto node10 = this->astCtxt->extract(14, 14, op1);
12290 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"POPF CF operation");
12291 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"POPF PF operation");
12292 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"POPF AF operation");
12293 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"POPF ZF operation");
12294 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"POPF SF operation");
12295 auto expr6 = this->symbolicEngine->
createSymbolicExpression(inst, node6, dst6.getRegister(),
"POPF TF operation");
12296 auto expr7 = this->symbolicEngine->
createSymbolicExpression(inst, node7, dst7.getRegister(),
"POPF IF operation");
12297 auto expr8 = this->symbolicEngine->
createSymbolicExpression(inst, node8, dst8.getRegister(),
"POPF DF operation");
12298 auto expr9 = this->symbolicEngine->
createSymbolicExpression(inst, node9, dst9.getRegister(),
"POPF OF operation");
12299 auto expr10 = this->symbolicEngine->
createSymbolicExpression(inst, node10, dst10.getRegister(),
"POPF NT operation");
12314 alignAddStack_s(inst, src.
getSize());
12317 this->controlFlow_s(inst);
12343 auto node1 = this->astCtxt->extract(0, 0, op1);
12344 auto node2 = this->astCtxt->extract(2, 2, op1);
12345 auto node3 = this->astCtxt->extract(4, 4, op1);
12346 auto node4 = this->astCtxt->extract(6, 6, op1);
12347 auto node5 = this->astCtxt->extract(7, 7, op1);
12348 auto node6 = this->astCtxt->extract(8, 8, op1);
12349 auto node7 = this->astCtxt->bvtrue();
12350 auto node8 = this->astCtxt->extract(10, 10, op1);
12351 auto node9 = this->astCtxt->extract(11, 11, op1);
12353 auto node10 = this->astCtxt->extract(14, 14, op1);
12354 auto node11 = this->astCtxt->bvfalse();
12356 auto node12 = this->astCtxt->extract(18, 18, op1);
12359 auto node13 = this->astCtxt->extract(21, 21, op1);
12362 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"POPFD CF operation");
12363 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"POPFD PF operation");
12364 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"POPFD AF operation");
12365 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"POPFD ZF operation");
12366 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"POPFD SF operation");
12367 auto expr6 = this->symbolicEngine->
createSymbolicExpression(inst, node6, dst6.getRegister(),
"POPFD TF operation");
12368 auto expr7 = this->symbolicEngine->
createSymbolicExpression(inst, node7, dst7.getRegister(),
"POPFD IF operation");
12369 auto expr8 = this->symbolicEngine->
createSymbolicExpression(inst, node8, dst8.getRegister(),
"POPFD DF operation");
12370 auto expr9 = this->symbolicEngine->
createSymbolicExpression(inst, node9, dst9.getRegister(),
"POPFD OF operation");
12371 auto expr10 = this->symbolicEngine->
createSymbolicExpression(inst, node10, dst10.getRegister(),
"POPFD NT operation");
12372 auto expr11 = this->symbolicEngine->
createSymbolicExpression(inst, node11, dst11.getRegister(),
"POPFD RF operation");
12373 auto expr12 = this->symbolicEngine->
createSymbolicExpression(inst, node12, dst12.getRegister(),
"POPFD AC operation");
12374 auto expr13 = this->symbolicEngine->
createSymbolicExpression(inst, node13, dst13.getRegister(),
"POPFD ID operation");
12392 alignAddStack_s(inst, src.
getSize());
12395 this->controlFlow_s(inst);
12421 auto node1 = this->astCtxt->extract(0, 0, op1);
12422 auto node2 = this->astCtxt->extract(2, 2, op1);
12423 auto node3 = this->astCtxt->extract(4, 4, op1);
12424 auto node4 = this->astCtxt->extract(6, 6, op1);
12425 auto node5 = this->astCtxt->extract(7, 7, op1);
12426 auto node6 = this->astCtxt->extract(8, 8, op1);
12427 auto node7 = this->astCtxt->bvtrue();
12428 auto node8 = this->astCtxt->extract(10, 10, op1);
12429 auto node9 = this->astCtxt->extract(11, 11, op1);
12431 auto node10 = this->astCtxt->extract(14, 14, op1);
12432 auto node11 = this->astCtxt->bvfalse();
12434 auto node12 = this->astCtxt->extract(18, 18, op1);
12437 auto node13 = this->astCtxt->extract(21, 21, op1);
12440 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"POPFQ CF operation");
12441 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"POPFQ PF operation");
12442 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"POPFQ AF operation");
12443 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"POPFQ ZF operation");
12444 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"POPFQ SF operation");
12445 auto expr6 = this->symbolicEngine->
createSymbolicExpression(inst, node6, dst6.getRegister(),
"POPFQ TF operation");
12446 auto expr7 = this->symbolicEngine->
createSymbolicExpression(inst, node7, dst7.getRegister(),
"POPFQ IF operation");
12447 auto expr8 = this->symbolicEngine->
createSymbolicExpression(inst, node8, dst8.getRegister(),
"POPFQ DF operation");
12448 auto expr9 = this->symbolicEngine->
createSymbolicExpression(inst, node9, dst9.getRegister(),
"POPFQ OF operation");
12449 auto expr10 = this->symbolicEngine->
createSymbolicExpression(inst, node10, dst10.getRegister(),
"POPFD NT operation");
12450 auto expr11 = this->symbolicEngine->
createSymbolicExpression(inst, node11, dst11.getRegister(),
"POPFD RF operation");
12451 auto expr12 = this->symbolicEngine->
createSymbolicExpression(inst, node12, dst12.getRegister(),
"POPFD AC operation");
12452 auto expr13 = this->symbolicEngine->
createSymbolicExpression(inst, node13, dst13.getRegister(),
"POPFD ID operation");
12470 alignAddStack_s(inst, src.
getSize());
12473 this->controlFlow_s(inst);
12486 auto node = this->astCtxt->bvor(op1, op2);
12492 this->updateFTW(inst, expr);
12495 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12498 this->controlFlow_s(inst);
12509 this->controlFlow_s(inst);
12521 std::vector<triton::ast::SharedAbstractNode> pack;
12529 int index_high = i+(dst.
getSize() == 8 ? 2 : 3);
12531 this->astCtxt->bvmul(
12533 this->astCtxt->extract(control, control, op2))),
12535 this->astCtxt->bvlshr(
12537 this->astCtxt->bvmul(
12539 this->astCtxt->extract(index_high, index_low, op2)),
12543 auto node = this->astCtxt->concat(pack);
12552 this->controlFlow_s(inst);
12566 std::vector<triton::ast::SharedAbstractNode> pack;
12570 this->astCtxt->extract(31, 0,
12571 this->astCtxt->bvlshr(
12573 this->astCtxt->bvmul(
12581 this->astCtxt->extract(31, 0,
12582 this->astCtxt->bvlshr(
12584 this->astCtxt->bvmul(
12592 this->astCtxt->extract(31, 0,
12593 this->astCtxt->bvlshr(
12595 this->astCtxt->bvmul(
12603 this->astCtxt->extract(31, 0,
12604 this->astCtxt->bvlshr(
12606 this->astCtxt->bvmul(
12614 auto node = this->astCtxt->concat(pack);
12623 this->controlFlow_s(inst);
12637 std::vector<triton::ast::SharedAbstractNode> pack;
12641 this->astCtxt->extract(79, 64,
12642 this->astCtxt->bvlshr(
12644 this->astCtxt->bvmul(
12652 this->astCtxt->extract(79, 64,
12653 this->astCtxt->bvlshr(
12655 this->astCtxt->bvmul(
12663 this->astCtxt->extract(79, 64,
12664 this->astCtxt->bvlshr(
12666 this->astCtxt->bvmul(
12674 this->astCtxt->extract(79, 64,
12675 this->astCtxt->bvlshr(
12677 this->astCtxt->bvmul(
12685 this->astCtxt->extract(63, 0, op2)
12688 auto node = this->astCtxt->concat(pack);
12697 this->controlFlow_s(inst);
12711 std::vector<triton::ast::SharedAbstractNode> pack;
12715 this->astCtxt->extract(127, 64, op2)
12718 this->astCtxt->extract(15, 0,
12719 this->astCtxt->bvlshr(
12721 this->astCtxt->bvmul(
12729 this->astCtxt->extract(15, 0,
12730 this->astCtxt->bvlshr(
12732 this->astCtxt->bvmul(
12740 this->astCtxt->extract(15, 0,
12741 this->astCtxt->bvlshr(
12743 this->astCtxt->bvmul(
12751 this->astCtxt->extract(15, 0,
12752 this->astCtxt->bvlshr(
12754 this->astCtxt->bvmul(
12762 auto node = this->astCtxt->concat(pack);
12771 this->controlFlow_s(inst);
12785 std::vector<triton::ast::SharedAbstractNode> pack;
12789 this->astCtxt->extract(15, 0,
12790 this->astCtxt->bvlshr(
12792 this->astCtxt->bvmul(
12800 this->astCtxt->extract(15, 0,
12801 this->astCtxt->bvlshr(
12803 this->astCtxt->bvmul(
12811 this->astCtxt->extract(15, 0,
12812 this->astCtxt->bvlshr(
12814 this->astCtxt->bvmul(
12822 this->astCtxt->extract(15, 0,
12823 this->astCtxt->bvlshr(
12825 this->astCtxt->bvmul(
12833 auto node = this->astCtxt->concat(pack);
12842 this->controlFlow_s(inst);
12852 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12855 std::vector<triton::ast::SharedAbstractNode> packed;
12861 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(31, 0, op2)));
12862 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 95, 64, op1), this->astCtxt->extract(31, 0, op2)));
12866 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(31, 0, op2)));
12867 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
12874 auto node = this->astCtxt->concat(packed);
12881 this->updateFTW(inst, expr);
12885 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12888 this->controlFlow_s(inst);
12898 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12901 auto node = this->astCtxt->bvshl(
12903 this->astCtxt->bvmul(
12904 this->astCtxt->ite(
12917 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12920 this->controlFlow_s(inst);
12930 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12935 std::vector<triton::ast::SharedAbstractNode> packed;
12941 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(63, 0, op2)));
12942 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 63, 0, op1), this->astCtxt->extract(63, 0, op2)));
12943 node = this->astCtxt->concat(packed);
12949 node = this->astCtxt->bvshl(op1, op2);
12961 this->updateFTW(inst, expr);
12965 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12968 this->controlFlow_s(inst);
12978 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12981 std::vector<triton::ast::SharedAbstractNode> packed;
12987 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(15, 0, op2)));
12988 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(15, 0, op2)));
12989 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 95, 80, op1), this->astCtxt->extract(15, 0, op2)));
12990 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 79, 64, op1), this->astCtxt->extract(15, 0, op2)));
12994 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(15, 0, op2)));
12995 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(15, 0, op2)));
12996 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(15, 0, op2)));
12997 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
13004 auto node = this->astCtxt->concat(packed);
13011 this->updateFTW(inst, expr);
13015 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13018 this->controlFlow_s(inst);
13031 std::vector<triton::ast::SharedAbstractNode> pck;
13034 auto shift = this->astCtxt->ite(
13050 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
13052 auto node = this->astCtxt->concat(pck);
13058 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13061 this->controlFlow_s(inst);
13074 std::vector<triton::ast::SharedAbstractNode> pck;
13077 auto shift = this->astCtxt->ite(
13093 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
13095 auto node = this->astCtxt->concat(pck);
13101 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13104 this->controlFlow_s(inst);
13114 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13117 std::vector<triton::ast::SharedAbstractNode> packed;
13123 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(31, 0, op2)));
13124 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 95, 64, op1), this->astCtxt->extract(31, 0, op2)));
13128 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(31, 0, op2)));
13129 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
13136 auto node = this->astCtxt->concat(packed);
13143 this->updateFTW(inst, expr);
13147 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13150 this->controlFlow_s(inst);
13160 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13163 auto node = this->astCtxt->bvlshr(
13165 this->astCtxt->bvmul(
13166 this->astCtxt->ite(
13179 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13182 this->controlFlow_s(inst);
13192 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13197 std::vector<triton::ast::SharedAbstractNode> packed;
13203 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(63, 0, op2)));
13204 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 63, 0, op1), this->astCtxt->extract(63, 0, op2)));
13205 node = this->astCtxt->concat(packed);
13211 node = this->astCtxt->bvlshr(op1, op2);
13223 this->updateFTW(inst, expr);
13227 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13230 this->controlFlow_s(inst);
13240 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13243 std::vector<triton::ast::SharedAbstractNode> packed;
13249 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(15, 0, op2)));
13250 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(15, 0, op2)));
13251 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 95, 80, op1), this->astCtxt->extract(15, 0, op2)));
13252 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 79, 64, op1), this->astCtxt->extract(15, 0, op2)));
13256 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(15, 0, op2)));
13257 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(15, 0, op2)));
13258 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(15, 0, op2)));
13259 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
13266 auto node = this->astCtxt->concat(packed);
13273 this->updateFTW(inst, expr);
13277 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13280 this->controlFlow_s(inst);
13293 std::vector<triton::ast::SharedAbstractNode> packed;
13294 packed.reserve(16);
13300 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 120, op1), this->astCtxt->extract(127, 120, op2)));
13301 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(119, 112, op1), this->astCtxt->extract(119, 112, op2)));
13302 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(111, 104, op1), this->astCtxt->extract(111, 104, op2)));
13303 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(103, 96, op1), this->astCtxt->extract(103, 96, op2)));
13304 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(95, 88, op1), this->astCtxt->extract(95, 88, op2)));
13305 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(87, 80, op1), this->astCtxt->extract(87, 80, op2)));
13306 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(79, 72, op1), this->astCtxt->extract(79, 72, op2)));
13307 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(71, 64, op1), this->astCtxt->extract(71, 64, op2)));
13311 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 56, op1), this->astCtxt->extract(63, 56, op2)));
13312 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(55, 48, op1), this->astCtxt->extract(55, 48, op2)));
13313 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(47, 40, op1), this->astCtxt->extract(47, 40, op2)));
13314 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(39, 32, op1), this->astCtxt->extract(39, 32, op2)));
13315 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(31, 24, op1), this->astCtxt->extract(31, 24, op2)));
13316 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(23, 16, op1), this->astCtxt->extract(23, 16, op2)));
13317 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(15, 8, op1), this->astCtxt->extract(15, 8, op2)));
13318 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(7, 0, op1), this->astCtxt->extract(7, 0, op2)));
13326 auto node = this->astCtxt->concat(packed);
13333 this->updateFTW(inst, expr);
13337 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13340 this->controlFlow_s(inst);
13353 std::vector<triton::ast::SharedAbstractNode> packed;
13360 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(127, 96, op2)));
13361 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(95, 64, op1), this->astCtxt->extract(95, 64, op2)));
13365 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(63, 32, op2)));
13366 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
13374 auto node = this->astCtxt->concat(packed);
13381 this->updateFTW(inst, expr);
13385 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13388 this->controlFlow_s(inst);
13401 std::vector<triton::ast::SharedAbstractNode> packed;
13408 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(127, 64, op2)));
13412 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 0, op1), this->astCtxt->extract(63, 0, op2)));
13420 auto node = this->astCtxt->concat(packed);
13427 this->updateFTW(inst, expr);
13431 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13434 this->controlFlow_s(inst);
13447 std::vector<triton::ast::SharedAbstractNode> packed;
13454 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(127, 112, op2)));
13455 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(111, 96, op2)));
13456 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(95, 80, op1), this->astCtxt->extract(95, 80, op2)));
13457 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(79, 64, op1), this->astCtxt->extract(79, 64, op2)));
13461 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(63, 48, op2)));
13462 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(47, 32, op2)));
13463 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(31, 16, op2)));
13464 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
13472 auto node = this->astCtxt->concat(packed);
13479 this->updateFTW(inst, expr);
13483 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13486 this->controlFlow_s(inst);
13495 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
13496 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
13499 auto node1 = this->astCtxt->bvand(op1, op2);
13500 auto node2 = this->astCtxt->bvand(op1, this->astCtxt->bvnot(op2));
13507 expr1->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
13508 expr2->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
13511 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_AF),
"Clears adjust flag");
13512 this->cfPtest_s(inst, expr2, src1,
true);
13513 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
13514 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_PF),
"Clears parity flag");
13515 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_SF),
"Clears sign flag");
13516 this->zf_s(inst, expr1, src1,
true);
13519 this->controlFlow_s(inst);
13532 std::vector<triton::ast::SharedAbstractNode> unpack;
13533 unpack.reserve(24);
13539 unpack.push_back(this->astCtxt->extract(63, 56, op2));
13540 unpack.push_back(this->astCtxt->extract(63, 56, op1));
13541 unpack.push_back(this->astCtxt->extract(55, 48, op2));
13542 unpack.push_back(this->astCtxt->extract(55, 48, op1));
13543 unpack.push_back(this->astCtxt->extract(47, 40, op2));
13544 unpack.push_back(this->astCtxt->extract(55, 40, op1));
13545 unpack.push_back(this->astCtxt->extract(39, 32, op2));
13546 unpack.push_back(this->astCtxt->extract(39, 32, op1));
13551 unpack.push_back(this->astCtxt->extract(127, 120, op2));
13552 unpack.push_back(this->astCtxt->extract(127, 120, op1));
13553 unpack.push_back(this->astCtxt->extract(119, 112, op2));
13554 unpack.push_back(this->astCtxt->extract(119, 112, op1));
13555 unpack.push_back(this->astCtxt->extract(111, 104, op2));
13556 unpack.push_back(this->astCtxt->extract(111, 104, op1));
13557 unpack.push_back(this->astCtxt->extract(103, 96, op2));
13558 unpack.push_back(this->astCtxt->extract(103, 96, op1));
13559 unpack.push_back(this->astCtxt->extract(95, 88, op2));
13560 unpack.push_back(this->astCtxt->extract(95, 88, op1));
13561 unpack.push_back(this->astCtxt->extract(87, 80, op2));
13562 unpack.push_back(this->astCtxt->extract(87, 80, op1));
13563 unpack.push_back(this->astCtxt->extract(79, 72, op2));
13564 unpack.push_back(this->astCtxt->extract(79, 72, op1));
13565 unpack.push_back(this->astCtxt->extract(71, 64, op2));
13566 unpack.push_back(this->astCtxt->extract(71, 64, op1));
13573 auto node = this->astCtxt->concat(unpack);
13580 this->updateFTW(inst, expr);
13584 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13587 this->controlFlow_s(inst);
13600 std::vector<triton::ast::SharedAbstractNode> unpack;
13607 unpack.push_back(this->astCtxt->extract(63, 32, op2));
13608 unpack.push_back(this->astCtxt->extract(63, 32, op1));
13613 unpack.push_back(this->astCtxt->extract(127, 96, op2));
13614 unpack.push_back(this->astCtxt->extract(127, 96, op1));
13615 unpack.push_back(this->astCtxt->extract(95, 64, op2));
13616 unpack.push_back(this->astCtxt->extract(95, 64, op1));
13623 auto node = this->astCtxt->concat(unpack);
13630 this->updateFTW(inst, expr);
13634 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13637 this->controlFlow_s(inst);
13650 std::vector<triton::ast::SharedAbstractNode> unpack;
13657 unpack.push_back(this->astCtxt->extract(127, 64, op2));
13658 unpack.push_back(this->astCtxt->extract(127, 64, op1));
13665 auto node = this->astCtxt->concat(unpack);
13671 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13674 this->controlFlow_s(inst);
13687 std::vector<triton::ast::SharedAbstractNode> unpack;
13688 unpack.reserve(12);
13694 unpack.push_back(this->astCtxt->extract(63, 48, op2));
13695 unpack.push_back(this->astCtxt->extract(63, 48, op1));
13696 unpack.push_back(this->astCtxt->extract(47, 32, op2));
13697 unpack.push_back(this->astCtxt->extract(47, 32, op1));
13702 unpack.push_back(this->astCtxt->extract(127, 112, op2));
13703 unpack.push_back(this->astCtxt->extract(127, 112, op1));
13704 unpack.push_back(this->astCtxt->extract(111, 96, op2));
13705 unpack.push_back(this->astCtxt->extract(111, 96, op1));
13706 unpack.push_back(this->astCtxt->extract(95, 80, op2));
13707 unpack.push_back(this->astCtxt->extract(95, 80, op1));
13708 unpack.push_back(this->astCtxt->extract(79, 64, op2));
13709 unpack.push_back(this->astCtxt->extract(79, 64, op1));
13716 auto node = this->astCtxt->concat(unpack);
13723 this->updateFTW(inst, expr);
13727 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13730 this->controlFlow_s(inst);
13743 std::vector<triton::ast::SharedAbstractNode> unpack;
13744 unpack.reserve(24);
13750 unpack.push_back(this->astCtxt->extract(31, 24, op2));
13751 unpack.push_back(this->astCtxt->extract(31, 24, op1));
13752 unpack.push_back(this->astCtxt->extract(23, 16, op2));
13753 unpack.push_back(this->astCtxt->extract(23, 16, op1));
13754 unpack.push_back(this->astCtxt->extract(15, 8, op2));
13755 unpack.push_back(this->astCtxt->extract(15, 8, op1));
13756 unpack.push_back(this->astCtxt->extract(7, 0, op2));
13757 unpack.push_back(this->astCtxt->extract(7, 0, op1));
13762 unpack.push_back(this->astCtxt->extract(63, 56, op2));
13763 unpack.push_back(this->astCtxt->extract(63, 56, op1));
13764 unpack.push_back(this->astCtxt->extract(55, 48, op2));
13765 unpack.push_back(this->astCtxt->extract(55, 48, op1));
13766 unpack.push_back(this->astCtxt->extract(47, 40, op2));
13767 unpack.push_back(this->astCtxt->extract(47, 40, op1));
13768 unpack.push_back(this->astCtxt->extract(39, 32, op2));
13769 unpack.push_back(this->astCtxt->extract(39, 32, op1));
13770 unpack.push_back(this->astCtxt->extract(31, 24, op2));
13771 unpack.push_back(this->astCtxt->extract(31, 24, op1));
13772 unpack.push_back(this->astCtxt->extract(23, 16, op2));
13773 unpack.push_back(this->astCtxt->extract(23, 16, op1));
13774 unpack.push_back(this->astCtxt->extract(15, 8, op2));
13775 unpack.push_back(this->astCtxt->extract(15, 8, op1));
13776 unpack.push_back(this->astCtxt->extract(7, 0, op2));
13777 unpack.push_back(this->astCtxt->extract(7, 0, op1));
13784 auto node = this->astCtxt->concat(unpack);
13791 this->updateFTW(inst, expr);
13795 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13798 this->controlFlow_s(inst);
13811 std::vector<triton::ast::SharedAbstractNode> unpack;
13818 unpack.push_back(this->astCtxt->extract(31, 0, op2));
13819 unpack.push_back(this->astCtxt->extract(31, 0, op1));
13824 unpack.push_back(this->astCtxt->extract(63, 32, op2));
13825 unpack.push_back(this->astCtxt->extract(63, 32, op1));
13826 unpack.push_back(this->astCtxt->extract(31, 0, op2));
13827 unpack.push_back(this->astCtxt->extract(31, 0, op1));
13834 auto node = this->astCtxt->concat(unpack);
13841 this->updateFTW(inst, expr);
13845 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13848 this->controlFlow_s(inst);
13861 std::vector<triton::ast::SharedAbstractNode> unpack;
13868 unpack.push_back(this->astCtxt->extract(63, 0, op2));
13869 unpack.push_back(this->astCtxt->extract(63, 0, op1));
13876 auto node = this->astCtxt->concat(unpack);
13882 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13885 this->controlFlow_s(inst);
13898 std::vector<triton::ast::SharedAbstractNode> unpack;
13899 unpack.reserve(12);
13905 unpack.push_back(this->astCtxt->extract(31, 16, op2));
13906 unpack.push_back(this->astCtxt->extract(31, 16, op1));
13907 unpack.push_back(this->astCtxt->extract(15, 0, op2));
13908 unpack.push_back(this->astCtxt->extract(15, 0, op1));
13913 unpack.push_back(this->astCtxt->extract(63, 48, op2));
13914 unpack.push_back(this->astCtxt->extract(63, 48, op1));
13915 unpack.push_back(this->astCtxt->extract(47, 32, op2));
13916 unpack.push_back(this->astCtxt->extract(47, 32, op1));
13917 unpack.push_back(this->astCtxt->extract(31, 16, op2));
13918 unpack.push_back(this->astCtxt->extract(31, 16, op1));
13919 unpack.push_back(this->astCtxt->extract(15, 0, op2));
13920 unpack.push_back(this->astCtxt->extract(15, 0, op1));
13927 auto node = this->astCtxt->concat(unpack);
13934 this->updateFTW(inst, expr);
13938 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13941 this->controlFlow_s(inst);
13958 auto stackValue = alignSubStack_s(inst, size);
13971 this->controlFlow_s(inst);
13996 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
13997 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
13998 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
13999 auto op4 = this->symbolicEngine->
getOperandAst(inst, src4);
14000 auto op5 = this->symbolicEngine->
getOperandAst(inst, src5);
14001 auto op6 = this->symbolicEngine->
getOperandAst(inst, src6);
14002 auto op7 = this->symbolicEngine->
getOperandAst(inst, src7);
14003 auto op8 = this->symbolicEngine->
getOperandAst(inst, src8);
14006 auto node1 = this->astCtxt->zx(dst1.getBitSize() - src1.getBitSize(), op1);
14007 auto node2 = this->astCtxt->zx(dst2.getBitSize() - src2.getBitSize(), op2);
14008 auto node3 = this->astCtxt->zx(dst3.getBitSize() - src3.getBitSize(), op3);
14009 auto node4 = this->astCtxt->zx(dst4.getBitSize() - src4.getBitSize(), op4);
14010 auto node5 = this->astCtxt->zx(dst5.getBitSize() - src5.getBitSize(), op5);
14011 auto node6 = this->astCtxt->zx(dst6.getBitSize() - src6.getBitSize(), op6);
14012 auto node7 = this->astCtxt->zx(dst7.getBitSize() - src7.getBitSize(), op7);
14013 auto node8 = this->astCtxt->zx(dst8.getBitSize() - src8.getBitSize(), op8);
14016 alignSubStack_s(inst, 32);
14037 this->controlFlow_s(inst);
14045 auto stackValue = alignSubStack_s(inst, stack.getSize());
14063 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14064 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14065 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
14066 auto op4 = this->symbolicEngine->
getOperandAst(inst, src4);
14067 auto op5 = this->symbolicEngine->
getOperandAst(inst, src5);
14068 auto op6 = this->symbolicEngine->
getOperandAst(inst, src6);
14069 auto op7 = this->symbolicEngine->
getOperandAst(inst, src7);
14070 auto op8 = this->symbolicEngine->
getOperandAst(inst, src8);
14071 auto op9 = this->symbolicEngine->
getOperandAst(inst, src9);
14072 auto op10 = this->symbolicEngine->
getOperandAst(inst, src10);
14073 auto op11 = this->symbolicEngine->
getOperandAst(inst, src11);
14074 auto op12 = this->symbolicEngine->
getOperandAst(inst, src12);
14075 auto op13 = this->symbolicEngine->
getOperandAst(inst, src13);
14076 auto op14 = this->symbolicEngine->
getOperandAst(inst, src14);
14079 std::vector<triton::ast::SharedAbstractNode> eflags;
14080 eflags.reserve(22);
14082 eflags.push_back(op14);
14083 eflags.push_back(op13);
14084 eflags.push_back(op12);
14085 eflags.push_back(op11);
14086 eflags.push_back(this->astCtxt->bvfalse());
14087 eflags.push_back(this->astCtxt->bvfalse());
14088 eflags.push_back(this->astCtxt->bvfalse());
14089 eflags.push_back(op10);
14090 eflags.push_back(this->astCtxt->bvfalse());
14091 eflags.push_back(this->astCtxt->bvfalse());
14092 eflags.push_back(op9);
14093 eflags.push_back(op8);
14094 eflags.push_back(op7);
14095 eflags.push_back(op6);
14096 eflags.push_back(op5);
14097 eflags.push_back(op4);
14098 eflags.push_back(this->astCtxt->bvfalse());
14099 eflags.push_back(op3);
14100 eflags.push_back(this->astCtxt->bvfalse());
14101 eflags.push_back(op2);
14102 eflags.push_back(this->astCtxt->bvtrue());
14103 eflags.push_back(op1);
14105 auto node = this->astCtxt->zx(
14107 this->astCtxt->concat(eflags)
14115 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
14116 expr->isTainted = this->taintEngine->
taintUnion(dst, src3);
14117 expr->isTainted = this->taintEngine->
taintUnion(dst, src4);
14118 expr->isTainted = this->taintEngine->
taintUnion(dst, src5);
14119 expr->isTainted = this->taintEngine->
taintUnion(dst, src6);
14120 expr->isTainted = this->taintEngine->
taintUnion(dst, src7);
14121 expr->isTainted = this->taintEngine->
taintUnion(dst, src8);
14122 expr->isTainted = this->taintEngine->
taintUnion(dst, src9);
14123 expr->isTainted = this->taintEngine->
taintUnion(dst, src10);
14124 expr->isTainted = this->taintEngine->
taintUnion(dst, src11);
14125 expr->isTainted = this->taintEngine->
taintUnion(dst, src12);
14126 expr->isTainted = this->taintEngine->
taintUnion(dst, src13);
14127 expr->isTainted = this->taintEngine->
taintUnion(dst, src14);
14130 this->controlFlow_s(inst);
14138 auto stackValue = alignSubStack_s(inst, stack.getSize());
14156 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14157 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14158 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
14159 auto op4 = this->symbolicEngine->
getOperandAst(inst, src4);
14160 auto op5 = this->symbolicEngine->
getOperandAst(inst, src5);
14161 auto op6 = this->symbolicEngine->
getOperandAst(inst, src6);
14162 auto op7 = this->symbolicEngine->
getOperandAst(inst, src7);
14163 auto op8 = this->symbolicEngine->
getOperandAst(inst, src8);
14164 auto op9 = this->symbolicEngine->
getOperandAst(inst, src9);
14165 auto op10 = this->symbolicEngine->
getOperandAst(inst, src10);
14166 auto op11 = this->symbolicEngine->
getOperandAst(inst, src11);
14167 auto op12 = this->symbolicEngine->
getOperandAst(inst, src12);
14168 auto op13 = this->symbolicEngine->
getOperandAst(inst, src13);
14169 auto op14 = this->symbolicEngine->
getOperandAst(inst, src14);
14172 std::vector<triton::ast::SharedAbstractNode> eflags;
14173 eflags.reserve(22);
14175 eflags.push_back(op14);
14176 eflags.push_back(op13);
14177 eflags.push_back(op12);
14178 eflags.push_back(op11);
14179 eflags.push_back(this->astCtxt->bvfalse());
14180 eflags.push_back(this->astCtxt->bvfalse());
14181 eflags.push_back(this->astCtxt->bvfalse());
14182 eflags.push_back(op10);
14183 eflags.push_back(this->astCtxt->bvfalse());
14184 eflags.push_back(this->astCtxt->bvfalse());
14185 eflags.push_back(op9);
14186 eflags.push_back(op8);
14187 eflags.push_back(op7);
14188 eflags.push_back(op6);
14189 eflags.push_back(op5);
14190 eflags.push_back(op4);
14191 eflags.push_back(this->astCtxt->bvfalse());
14192 eflags.push_back(op3);
14193 eflags.push_back(this->astCtxt->bvfalse());
14194 eflags.push_back(op2);
14195 eflags.push_back(this->astCtxt->bvtrue());
14196 eflags.push_back(op1);
14198 auto node = this->astCtxt->zx(
14200 this->astCtxt->concat(eflags)
14208 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
14209 expr->isTainted = this->taintEngine->
taintUnion(dst, src3);
14210 expr->isTainted = this->taintEngine->
taintUnion(dst, src4);
14211 expr->isTainted = this->taintEngine->
taintUnion(dst, src5);
14212 expr->isTainted = this->taintEngine->
taintUnion(dst, src6);
14213 expr->isTainted = this->taintEngine->
taintUnion(dst, src7);
14214 expr->isTainted = this->taintEngine->
taintUnion(dst, src8);
14215 expr->isTainted = this->taintEngine->
taintUnion(dst, src9);
14216 expr->isTainted = this->taintEngine->
taintUnion(dst, src10);
14217 expr->isTainted = this->taintEngine->
taintUnion(dst, src11);
14218 expr->isTainted = this->taintEngine->
taintUnion(dst, src12);
14219 expr->isTainted = this->taintEngine->
taintUnion(dst, src13);
14220 expr->isTainted = this->taintEngine->
taintUnion(dst, src14);
14223 this->controlFlow_s(inst);
14236 auto node = this->astCtxt->bvxor(op1, op2);
14242 this->updateFTW(inst, expr);
14246 this->taintEngine->
setTaint(src,
false);
14248 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14251 this->controlFlow_s(inst);
14264 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcCf);
14269 op2 = this->astCtxt->bvand(
14277 op2 = this->astCtxt->bvand(
14286 op2 = this->astCtxt->bvsmod(
14287 this->astCtxt->bvand(
14299 auto node1 = this->astCtxt->bvrol(
14300 this->astCtxt->concat(op3, op1),
14301 this->astCtxt->zx(((op1->getBitvectorSize() + op3->getBitvectorSize()) - op2->getBitvectorSize()), op2)
14308 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14311 auto node2 = this->astCtxt->extract(dst.
getBitSize()-1, 0, node1);
14317 expr2->isTainted = this->taintEngine->
taintUnion(dst, src);
14318 expr2->isTainted = this->taintEngine->
taintUnion(dst, srcCf);
14321 this->cfRcl_s(inst, expr2, node1, op2bis);
14322 this->ofRol_s(inst, expr2, dst, op2bis);
14325 if (op2->evaluate() > 1) {
14326 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14330 this->controlFlow_s(inst);
14342 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcCf);
14347 op2 = this->astCtxt->bvand(
14355 op2 = this->astCtxt->bvand(
14364 op2 = this->astCtxt->bvsmod(
14365 this->astCtxt->bvand(
14377 auto node1 = this->astCtxt->bvror(
14378 this->astCtxt->concat(op3, op1),
14379 this->astCtxt->zx(((op1->getBitvectorSize() + op3->getBitvectorSize()) - op2->getBitvectorSize()), op2)
14386 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14389 auto node2 = this->astCtxt->extract(dst.
getBitSize()-1, 0, node1);
14395 expr2->isTainted = this->taintEngine->
taintUnion(dst, src);
14396 expr2->isTainted = this->taintEngine->
taintUnion(dst, srcCf);
14399 this->ofRcr_s(inst, expr2, dst, op1, op2);
14400 this->cfRcr_s(inst, expr2, dst, node1, op2);
14403 if (op2->evaluate() > 1) {
14404 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14408 this->controlFlow_s(inst);
14427 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src);
14428 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src);
14431 this->controlFlow_s(inst);
14454 alignAddStack_s(inst, sp.getSize());
14458 auto offset = inst.
operands[0].getImmediate();
14460 alignAddStack_s(inst,
static_cast<triton::uint32>(offset.getValue()));
14480 op2 = this->astCtxt->bvsmod(
14481 this->astCtxt->bvand(
14487 op2bis = this->astCtxt->bvand(
14497 op2 = this->astCtxt->bvsmod(
14498 this->astCtxt->bvand(
14504 op2bis = this->astCtxt->bvand(
14515 auto node = this->astCtxt->bvrol(
14517 this->astCtxt->zx(op1->getBitvectorSize() - op2->getBitvectorSize(), op2)
14524 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14527 this->cfRol_s(inst, expr, dst, op2bis);
14528 this->ofRol_s(inst, expr, dst, op2bis);
14531 if (op2->evaluate() > 1) {
14532 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14536 this->controlFlow_s(inst);
14552 op2 = this->astCtxt->bvsmod(
14553 this->astCtxt->bvand(
14559 op2bis = this->astCtxt->bvand(
14569 op2 = this->astCtxt->bvsmod(
14570 this->astCtxt->bvand(
14576 op2bis = this->astCtxt->bvand(
14587 auto node = this->astCtxt->bvror(
14589 this->astCtxt->zx(op1->getBitvectorSize() - op2->getBitvectorSize(), op2)
14596 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14599 this->cfRor_s(inst, expr, dst, op2);
14600 this->ofRor_s(inst, expr, dst, op2bis);
14603 if (op2->evaluate() > 1) {
14604 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14608 this->controlFlow_s(inst);
14618 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14619 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14637 auto node = this->astCtxt->bvror(
14639 this->astCtxt->zx(op1->getBitvectorSize() - op2->getBitvectorSize(), op2)
14647 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
14650 this->controlFlow_s(inst);
14666 auto node1 = this->astCtxt->extract(7, 7, op1);
14667 auto node2 = this->astCtxt->extract(6, 6, op1);
14668 auto node3 = this->astCtxt->extract(4, 4, op1);
14669 auto node4 = this->astCtxt->extract(2, 2, op1);
14670 auto node5 = this->astCtxt->extract(0, 0, op1);
14673 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"SAHF SF operation");
14674 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"SAHF ZF operation");
14675 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"SAHF AF operation");
14676 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"SAHF PF operation");
14677 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"SAHF CF operation");
14687 this->controlFlow_s(inst);
14697 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
14705 auto node = this->astCtxt->bvashr(op1, op2);
14711 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14714 this->cfSar_s(inst, expr, dst, op1, op2);
14715 this->ofSar_s(inst, expr, dst, op2);
14716 this->pfShl_s(inst, expr, dst, op2);
14717 this->sfShl_s(inst, expr, dst, op2);
14718 this->zfShl_s(inst, expr, dst, op2);
14721 if (op2->evaluate() != 0) {
14722 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
14725 if (op2->evaluate() > 1) {
14726 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14730 this->controlFlow_s(inst);
14740 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14741 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14759 auto node = this->astCtxt->bvashr(op1, op2);
14766 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
14769 this->controlFlow_s(inst);
14781 auto op3 = this->astCtxt->zx(src.
getBitSize()-1, this->symbolicEngine->getOperandAst(inst, srcCf));
14784 auto node = this->astCtxt->bvsub(op1, this->astCtxt->bvadd(op2, op3));
14790 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14791 expr->isTainted = this->taintEngine->
taintUnion(dst, srcCf);
14794 this->af_s(inst, expr, dst, op1, op2);
14795 this->cfSub_s(inst, expr, dst, op1, op2);
14796 this->ofSub_s(inst, expr, dst, op1, op2);
14797 this->pf_s(inst, expr, dst);
14798 this->sf_s(inst, expr, dst);
14799 this->zf_s(inst, expr, dst);
14802 this->controlFlow_s(inst);
14819 this->controlFlow_s(inst);
14826 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14830 auto node1 = this->astCtxt->bvsub(op1, op2);
14831 auto node2 = this->astCtxt->ite(
14832 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14833 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::byte, index.getBitSize())),
14834 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::byte, index.getBitSize()))
14842 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14843 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
14846 this->af_s(inst, expr1, dst, op1, op2,
true);
14847 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
14848 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
14849 this->pf_s(inst, expr1, dst,
true);
14850 this->sf_s(inst, expr1, dst,
true);
14851 this->zf_s(inst, expr1, dst,
true);
14854 this->controlFlow_s(inst);
14871 this->controlFlow_s(inst);
14878 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14882 auto node1 = this->astCtxt->bvsub(op1, op2);
14883 auto node2 = this->astCtxt->ite(
14884 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14894 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14895 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
14898 this->af_s(inst, expr1, dst, op1, op2,
true);
14899 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
14900 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
14901 this->pf_s(inst, expr1, dst,
true);
14902 this->sf_s(inst, expr1, dst,
true);
14903 this->zf_s(inst, expr1, dst,
true);
14906 this->controlFlow_s(inst);
14923 this->controlFlow_s(inst);
14930 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14934 auto node1 = this->astCtxt->bvsub(op1, op2);
14935 auto node2 = this->astCtxt->ite(
14936 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14946 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14947 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
14950 this->af_s(inst, expr1, dst, op1, op2,
true);
14951 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
14952 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
14953 this->pf_s(inst, expr1, dst,
true);
14954 this->sf_s(inst, expr1, dst,
true);
14955 this->zf_s(inst, expr1, dst,
true);
14958 this->controlFlow_s(inst);
14975 this->controlFlow_s(inst);
14982 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14986 auto node1 = this->astCtxt->bvsub(op1, op2);
14987 auto node2 = this->astCtxt->ite(
14988 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14989 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::word, index.getBitSize())),
14990 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::word, index.getBitSize()))
14998 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14999 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
15002 this->af_s(inst, expr1, dst, op1, op2,
true);
15003 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
15004 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
15005 this->pf_s(inst, expr1, dst,
true);
15006 this->sf_s(inst, expr1, dst,
true);
15007 this->zf_s(inst, expr1, dst,
true);
15010 this->controlFlow_s(inst);
15024 auto node = this->astCtxt->ite(
15025 this->astCtxt->equal(
15026 this->astCtxt->bvand(
15027 this->astCtxt->bvnot(op2),
15028 this->astCtxt->bvnot(op3)
15030 this->astCtxt->bvtrue()
15040 if (op2->evaluate().is_zero() && op3->evaluate().is_zero()) {
15046 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15049 this->controlFlow_s(inst);
15061 auto node = this->astCtxt->ite(
15062 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15071 if (op2->evaluate().is_zero()) {
15079 this->controlFlow_s(inst);
15091 auto node = this->astCtxt->ite(
15092 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15101 if (!op2->evaluate().is_zero()) {
15109 this->controlFlow_s(inst);
15123 auto node = this->astCtxt->ite(
15124 this->astCtxt->equal(this->astCtxt->bvor(op2, op3), this->astCtxt->bvtrue()),
15133 if (!op2->evaluate().is_zero() || !op3->evaluate().is_zero()) {
15139 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15142 this->controlFlow_s(inst);
15154 auto node = this->astCtxt->ite(
15155 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15164 if (!op2->evaluate().is_zero()) {
15172 this->controlFlow_s(inst);
15188 auto node = this->astCtxt->ite(
15189 this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op2, op3), op4), this->astCtxt->bvfalse()),
15198 if ((op2->evaluate().is_zero() == op3->evaluate().is_zero()) && op4->evaluate().is_zero()) {
15204 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15205 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15208 this->controlFlow_s(inst);
15222 auto node = this->astCtxt->ite(
15223 this->astCtxt->equal(op2, op3),
15232 if (op2->evaluate().is_zero() == op3->evaluate().is_zero()) {
15238 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15241 this->controlFlow_s(inst);
15255 auto node = this->astCtxt->ite(
15256 this->astCtxt->equal(this->astCtxt->bvxor(op2, op3), this->astCtxt->bvtrue()),
15265 if (op2->evaluate().is_zero() != op3->evaluate().is_zero()) {
15271 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15274 this->controlFlow_s(inst);
15290 auto node = this->astCtxt->ite(
15291 this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op2, op3), op4), this->astCtxt->bvtrue()),
15300 if ((op2->evaluate().is_zero() != op3->evaluate().is_zero()) || !op4->evaluate().is_zero()) {
15306 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15307 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15310 this->controlFlow_s(inst);
15322 auto node = this->astCtxt->ite(
15323 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15332 if (op2->evaluate().is_zero()) {
15340 this->controlFlow_s(inst);
15352 auto node = this->astCtxt->ite(
15353 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15362 if (op2->evaluate().is_zero()) {
15370 this->controlFlow_s(inst);
15382 auto node = this->astCtxt->ite(
15383 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15392 if (op2->evaluate().is_zero()) {
15400 this->controlFlow_s(inst);
15412 auto node = this->astCtxt->ite(
15413 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15422 if (op2->evaluate().is_zero()) {
15430 this->controlFlow_s(inst);
15442 auto node = this->astCtxt->ite(
15443 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15452 if (!op2->evaluate().is_zero()) {
15460 this->controlFlow_s(inst);
15472 auto node = this->astCtxt->ite(
15473 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15482 if (!op2->evaluate().is_zero()) {
15490 this->controlFlow_s(inst);
15502 auto node = this->astCtxt->ite(
15503 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15512 if (!op2->evaluate().is_zero()) {
15520 this->controlFlow_s(inst);
15526 this->controlFlow_s(inst);
15536 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
15545 auto node = this->astCtxt->bvshl(op1, op2);
15551 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
15554 this->cfShl_s(inst, expr, dst, op1, op2);
15555 this->ofShl_s(inst, expr, dst, op1, op2);
15556 this->pfShl_s(inst, expr, dst, op2);
15557 this->sfShl_s(inst, expr, dst, op2);
15558 this->zfShl_s(inst, expr, dst, op2);
15561 if (op2->evaluate() != 0) {
15562 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15565 if (op2bis->evaluate() > dst.
getBitSize()) {
15566 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15569 if (op2->evaluate() > 1) {
15570 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15574 this->controlFlow_s(inst);
15585 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
15586 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
15592 op3 = this->astCtxt->bvsmod(
15593 this->astCtxt->bvand(
15596 this->astCtxt->bv(dst.
getBitSize(), src2.getBitSize())
15603 op3 = this->astCtxt->bvsmod(
15604 this->astCtxt->bvand(
15616 auto node = this->astCtxt->extract(
15618 this->astCtxt->bvrol(
15619 this->astCtxt->concat(op2, op1),
15620 this->astCtxt->zx(((op1->getBitvectorSize() + op2->getBitvectorSize()) - op3->getBitvectorSize()), op3)
15629 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15632 this->cfShld_s(inst, expr, dst, op1, op2, op3);
15633 this->ofShld_s(inst, expr, dst, op1, op2, op3);
15634 this->pfShl_s(inst, expr, dst, op3);
15635 this->sfShld_s(inst, expr, dst, op1, op2, op3);
15636 this->zfShl_s(inst, expr, dst, op3);
15639 if (op3->evaluate() != 0) {
15640 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15643 if (op3->evaluate() > 1) {
15644 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15647 if (op3bis->evaluate() > dst.
getBitSize()) {
15648 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15649 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15650 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15651 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
15652 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
15653 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
15659 this->controlFlow_s(inst);
15669 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
15670 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
15688 auto node = this->astCtxt->bvshl(op1, op2);
15695 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15698 this->controlFlow_s(inst);
15708 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
15717 auto node = this->astCtxt->bvlshr(op1, op2);
15723 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
15726 this->cfShr_s(inst, expr, dst, op1, op2);
15727 this->ofShr_s(inst, expr, dst, op1, op2);
15728 this->pfShl_s(inst, expr, dst, op2);
15729 this->sfShl_s(inst, expr, dst, op2);
15730 this->zfShl_s(inst, expr, dst, op2);
15733 if (op2->evaluate() != 0) {
15734 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15737 if (op2bis->evaluate() > dst.
getBitSize()) {
15738 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15741 if (op2->evaluate() > 1) {
15742 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15746 this->controlFlow_s(inst);
15757 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
15758 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
15764 op3 = this->astCtxt->bvsmod(
15765 this->astCtxt->bvand(
15768 this->astCtxt->bv(dst.
getBitSize(), src2.getBitSize())
15775 op3 = this->astCtxt->bvsmod(
15776 this->astCtxt->bvand(
15788 auto node = this->astCtxt->extract(
15790 this->astCtxt->bvror(
15791 this->astCtxt->concat(op2, op1),
15792 this->astCtxt->zx(((op1->getBitvectorSize() + op2->getBitvectorSize()) - op3->getBitvectorSize()), op3)
15801 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15804 this->cfShrd_s(inst, expr, dst, op1, op2, op3);
15805 this->ofShrd_s(inst, expr, dst, op1, op2, op3);
15806 this->pfShl_s(inst, expr, dst, op3);
15807 this->sfShrd_s(inst, expr, dst, op1, op2, op3);
15808 this->zfShl_s(inst, expr, dst, op3);
15811 if (op3->evaluate() != 0) {
15812 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15815 if (op3->evaluate() > 1) {
15816 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15819 if (op3bis->evaluate() > dst.
getBitSize()) {
15820 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15821 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15822 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15823 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
15824 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
15825 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
15831 this->controlFlow_s(inst);
15841 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
15842 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
15860 auto node = this->astCtxt->bvlshr(op1, op2);
15867 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15870 this->controlFlow_s(inst);
15875 this->setFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Sets carry flag");
15877 this->controlFlow_s(inst);
15882 this->setFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_DF),
"Sets direction flag");
15884 this->controlFlow_s(inst);
15889 this->setFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_IF),
"Sets interrupt flag");
15891 this->controlFlow_s(inst);
15912 this->controlFlow_s(inst);
15925 this->controlFlow_s(inst);
15931 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
15936 auto node2 = this->astCtxt->ite(
15937 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
15938 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::byte, index.getBitSize())),
15939 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::byte, index.getBitSize()))
15948 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
15951 this->controlFlow_s(inst);
15964 this->controlFlow_s(inst);
15970 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
15975 auto node2 = this->astCtxt->ite(
15976 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
15987 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
15990 this->controlFlow_s(inst);
16003 this->controlFlow_s(inst);
16009 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
16014 auto node2 = this->astCtxt->ite(
16015 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
16026 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
16029 this->controlFlow_s(inst);
16042 this->controlFlow_s(inst);
16048 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
16053 auto node2 = this->astCtxt->ite(
16054 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
16055 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::word, index.getBitSize())),
16056 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::word, index.getBitSize()))
16065 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
16068 this->controlFlow_s(inst);
16081 auto node = this->astCtxt->bvsub(op1, op2);
16087 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16090 this->af_s(inst, expr, dst, op1, op2);
16091 this->cfSub_s(inst, expr, dst, op1, op2);
16092 this->ofSub_s(inst, expr, dst, op1, op2);
16093 this->pf_s(inst, expr, dst);
16094 this->sf_s(inst, expr, dst);
16095 this->zf_s(inst, expr, dst);
16098 this->controlFlow_s(inst);
16107 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16110 auto node1 = this->astCtxt->bvadd(op1, this->astCtxt->bv(inst.
getSize(), src1.getBitSize()));
16119 if (src1.getBitSize() == 64) {
16123 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16131 this->controlFlow_s(inst);
16137 this->controlFlow_s(inst);
16146 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16147 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16150 auto node = this->astCtxt->bvand(op1, op2);
16156 expr->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
16159 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
16160 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
16161 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
16162 this->pf_s(inst, expr, src1,
true);
16163 this->sf_s(inst, expr, src1,
true);
16164 this->zf_s(inst, expr, src1,
true);
16167 this->controlFlow_s(inst);
16184 node = this->astCtxt->ite(
16185 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16186 this->astCtxt->bv(bvSize1, bvSize1),
16187 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16188 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16189 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16190 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16191 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16192 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16193 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16194 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16195 this->astCtxt->bv(0, bvSize1)
16200 node = this->astCtxt->ite(
16201 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16202 this->astCtxt->bv(bvSize1, bvSize1),
16203 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16204 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16205 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16206 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16207 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16208 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16209 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16210 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16211 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
16212 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
16213 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
16214 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
16215 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
16216 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
16217 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
16218 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
16219 this->astCtxt->bv(0, bvSize1)
16224 node = this->astCtxt->ite(
16225 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16226 this->astCtxt->bv(bvSize1, bvSize1),
16227 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16228 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16229 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16230 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16231 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16232 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16233 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16234 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16235 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
16236 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
16237 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
16238 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
16239 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
16240 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
16241 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
16242 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
16243 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
16244 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
16245 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
16246 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
16247 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
16248 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
16249 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
16250 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
16251 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
16252 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
16253 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
16254 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
16255 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
16256 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
16257 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
16258 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
16259 this->astCtxt->bv(0, bvSize1)
16260 ))))))))))))))))))))))))))))))))
16264 node = this->astCtxt->ite(
16265 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16266 this->astCtxt->bv(bvSize1, bvSize1),
16267 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16268 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16269 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16270 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16271 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16272 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16273 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16274 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16275 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
16276 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
16277 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
16278 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
16279 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
16280 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
16281 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
16282 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
16283 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
16284 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
16285 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
16286 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
16287 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
16288 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
16289 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
16290 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
16291 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
16292 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
16293 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
16294 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
16295 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
16296 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
16297 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
16298 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
16299 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(32, 32, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
16300 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(33, 33, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
16301 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(34, 34, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
16302 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(35, 35, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
16303 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(36, 36, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
16304 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(37, 37, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
16305 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(38, 38, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
16306 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(39, 39, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
16307 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(40, 40, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
16308 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(41, 41, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
16309 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(42, 42, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
16310 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(43, 43, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
16311 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(44, 44, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
16312 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(45, 45, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
16313 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(46, 46, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
16314 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(47, 47, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
16315 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(48, 48, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
16316 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(49, 49, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
16317 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(50, 50, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
16318 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(51, 51, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
16319 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(52, 52, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
16320 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(53, 53, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
16321 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(54, 54, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
16322 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(55, 55, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
16323 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(56, 56, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
16324 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(57, 57, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
16325 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(58, 58, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
16326 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(59, 59, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
16327 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(60, 60, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
16328 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(61, 61, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
16329 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(62, 62, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
16330 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(63, 63, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
16331 this->astCtxt->bv(0, bvSize1)
16332 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
16346 this->cfTzcnt_s(inst, expr, src, op1);
16347 this->zf_s(inst, expr, src);
16350 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
16351 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
16352 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
16353 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
16356 this->controlFlow_s(inst);
16369 auto node = this->astCtxt->concat(
16370 this->astCtxt->extract(127, 64, op2),
16371 this->astCtxt->extract(127, 64, op1)
16378 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16381 this->controlFlow_s(inst);
16394 std::vector<triton::ast::SharedAbstractNode> unpack;
16397 unpack.push_back(this->astCtxt->extract(127, 96, op2));
16398 unpack.push_back(this->astCtxt->extract(127, 96, op1));
16399 unpack.push_back(this->astCtxt->extract(95, 64, op2));
16400 unpack.push_back(this->astCtxt->extract(95, 64, op1));
16402 auto node = this->astCtxt->concat(unpack);
16408 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16411 this->controlFlow_s(inst);
16424 auto node = this->astCtxt->concat(
16425 this->astCtxt->extract(63, 0, op2),
16426 this->astCtxt->extract(63, 0, op1)
16433 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16436 this->controlFlow_s(inst);
16449 std::vector<triton::ast::SharedAbstractNode> unpack;
16452 unpack.push_back(this->astCtxt->extract(63, 32, op2));
16453 unpack.push_back(this->astCtxt->extract(63, 32, op1));
16454 unpack.push_back(this->astCtxt->extract(31, 0, op2));
16455 unpack.push_back(this->astCtxt->extract(31, 0, op1));
16457 auto node = this->astCtxt->concat(unpack);
16463 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16466 this->controlFlow_s(inst);
16478 auto node = this->astCtxt->bvtrue();
16487 this->controlFlow_s(inst);
16499 auto node = this->astCtxt->bvtrue();
16508 this->controlFlow_s(inst);
16518 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16519 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16523 if (op2->evaluate() & 0b00000001) {
16524 node = this->astCtxt->extract(255, 128, op1);
16526 node = this->astCtxt->extract(127, 0, op1);
16536 this->controlFlow_s(inst);
16557 this->controlFlow_s(inst);
16566 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16575 this->controlFlow_s(inst);
16584 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16593 this->controlFlow_s(inst);
16602 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16611 this->controlFlow_s(inst);
16632 this->controlFlow_s(inst);
16672 else if (inst.
operands.size() == 3) {
16679 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
16680 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
16683 auto node = this->astCtxt->concat(
16696 this->controlFlow_s(inst);
16705 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16714 this->controlFlow_s(inst);
16723 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16732 this->controlFlow_s(inst);
16742 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16743 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16746 std::vector<triton::ast::SharedAbstractNode> pck;
16749 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
16755 auto signed_word = this->astCtxt->extract(high, low, ops[idx]);
16756 pck.push_back(this->astCtxt->ite(
16759 this->astCtxt->ite(
16768 auto node = this->astCtxt->concat(pck);
16777 this->controlFlow_s(inst);
16787 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16788 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16791 std::vector<triton::ast::SharedAbstractNode> pck;
16794 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
16800 auto signed_dword = this->astCtxt->extract(high, low, ops[idx]);
16801 pck.push_back(this->astCtxt->ite(
16804 this->astCtxt->ite(
16813 auto node = this->astCtxt->concat(pck);
16822 this->controlFlow_s(inst);
16832 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16833 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16836 std::vector<triton::ast::SharedAbstractNode> pck;
16839 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
16845 auto signed_word = this->astCtxt->extract(high, low, ops[idx]);
16846 pck.push_back(this->astCtxt->ite(
16849 this->astCtxt->ite(
16858 auto node = this->astCtxt->concat(pck);
16867 this->controlFlow_s(inst);
16877 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16878 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16881 std::vector<triton::ast::SharedAbstractNode> pck;
16887 pck.push_back(this->astCtxt->bvadd(this->astCtxt->extract(high, low, op1), this->astCtxt->extract(high, low, op2)));
16889 auto node = this->astCtxt->concat(pck);
16898 this->controlFlow_s(inst);
16908 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16909 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16912 std::vector<triton::ast::SharedAbstractNode> pck;
16918 pck.push_back(this->astCtxt->bvadd(this->astCtxt->extract(high, low, op1), this->astCtxt->extract(high, low, op2)));
16920 auto node = this->astCtxt->concat(pck);
16929 this->controlFlow_s(inst);
16939 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16940 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16943 std::vector<triton::ast::SharedAbstractNode> pck;
16949 pck.push_back(this->astCtxt->bvadd(this->astCtxt->extract(high, low, op1), this->astCtxt->extract(high, low, op2)));
16951 auto node = this->astCtxt->concat(pck);
16960 this->controlFlow_s(inst);
16970 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
16971 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
16974 auto node = this->astCtxt->bvand(op2, op3);
16983 this->controlFlow_s(inst);
16993 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
16994 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
16997 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op2), op3);
17006 this->controlFlow_s(inst);
17017 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17018 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17019 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
17022 std::deque<triton::arch::OperandWrapper> taint;
17026 taint.push_back(src1);
17027 return this->astCtxt->extract(127, 0, op1);
17029 taint.push_back(src1);
17030 return this->astCtxt->extract(255, 128, op1);
17032 taint.push_back(src2);
17033 return this->astCtxt->extract(127, 0, op2);
17036 taint.push_back(src2);
17037 return this->astCtxt->extract(255, 128, op2);
17042 auto high = permute((ctrl >> 4) & 0b00000011);
17043 auto low = permute(ctrl & 0b00000011);
17045 if (ctrl & 0b00001000) {
17046 low = this->astCtxt->bv(0, 128);
17050 if (ctrl & 0b10000000) {
17051 high = this->astCtxt->bv(0, 128);
17055 auto node = this->astCtxt->concat(high, low);
17061 if (taint.empty()) {
17062 this->taintEngine->
setTaint(dst,
false);
17063 }
else if (taint.size() == 1) {
17070 this->controlFlow_s(inst);
17080 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17081 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17084 std::vector<triton::ast::SharedAbstractNode> pck;
17089 auto shift = this->astCtxt->bvmul(
17091 this->astCtxt->zx(src1.getBitSize() - 2,
17092 this->astCtxt->extract(high, high - 1, op2)));
17093 pck.push_back(this->astCtxt->extract(
triton::bitsize::qword - 1, 0, this->astCtxt->bvlshr(op1, shift)));
17096 auto node = this->astCtxt->concat(pck);
17102 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
17105 this->controlFlow_s(inst);
17116 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17117 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17119 auto node = this->astCtxt->extract(7, 0,
17120 this->astCtxt->bvlshr(
17122 this->astCtxt->bv(((op3->evaluate() & 0x0f) * 8), op2->getBitvectorSize())
17133 this->controlFlow_s(inst);
17144 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17145 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17148 this->astCtxt->bvlshr(
17161 this->controlFlow_s(inst);
17172 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17173 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17176 this->astCtxt->bvlshr(
17189 this->controlFlow_s(inst);
17214 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17215 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17218 this->astCtxt->bvlshr(
17231 this->controlFlow_s(inst);
17244 std::vector<triton::ast::SharedAbstractNode> exprs(dst.
getSize(), src_node);
17245 auto node = this->astCtxt->concat(exprs);
17254 this->controlFlow_s(inst);
17264 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17265 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17268 std::vector<triton::ast::SharedAbstractNode> pck;
17271 for (
triton::uint32 index = 0; index < src1.getSize(); index++) {
17274 pck.push_back(this->astCtxt->ite(
17275 this->astCtxt->equal(
17276 this->astCtxt->extract(high, low, op1),
17277 this->astCtxt->extract(high, low, op2)),
17283 auto node = this->astCtxt->concat(pck);
17292 this->controlFlow_s(inst);
17302 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17303 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17306 std::vector<triton::ast::SharedAbstractNode> pck;
17312 pck.push_back(this->astCtxt->ite(
17313 this->astCtxt->equal(
17314 this->astCtxt->extract(high, low, op1),
17315 this->astCtxt->extract(high, low, op2)),
17321 auto node = this->astCtxt->concat(pck);
17330 this->controlFlow_s(inst);
17340 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17341 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17344 std::vector<triton::ast::SharedAbstractNode> pck;
17350 pck.push_back(this->astCtxt->ite(
17351 this->astCtxt->equal(
17352 this->astCtxt->extract(high, low, op1),
17353 this->astCtxt->extract(high, low, op2)),
17359 auto node = this->astCtxt->concat(pck);
17368 this->controlFlow_s(inst);
17378 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17379 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17382 std::vector<triton::ast::SharedAbstractNode> pck;
17388 pck.push_back(this->astCtxt->ite(
17389 this->astCtxt->equal(
17390 this->astCtxt->extract(high, low, op1),
17391 this->astCtxt->extract(high, low, op2)),
17397 auto node = this->astCtxt->concat(pck);
17406 this->controlFlow_s(inst);
17416 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17417 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17420 std::vector<triton::ast::SharedAbstractNode> pck;
17426 pck.push_back(this->astCtxt->ite(
17427 this->astCtxt->bvsgt(
17428 this->astCtxt->extract(high, low, op1),
17429 this->astCtxt->extract(high, low, op2)),
17435 auto node = this->astCtxt->concat(pck);
17444 this->controlFlow_s(inst);
17454 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17455 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17458 std::vector<triton::ast::SharedAbstractNode> pck;
17464 pck.push_back(this->astCtxt->ite(
17465 this->astCtxt->bvsgt(
17466 this->astCtxt->extract(high, low, op1),
17467 this->astCtxt->extract(high, low, op2)),
17473 auto node = this->astCtxt->concat(pck);
17482 this->controlFlow_s(inst);
17492 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17493 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17496 std::vector<triton::ast::SharedAbstractNode> pck;
17502 pck.push_back(this->astCtxt->ite(
17503 this->astCtxt->bvsgt(
17504 this->astCtxt->extract(high, low, op1),
17505 this->astCtxt->extract(high, low, op2)),
17511 auto node = this->astCtxt->concat(pck);
17520 this->controlFlow_s(inst);
17530 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17531 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17534 std::vector<triton::ast::SharedAbstractNode> pck;
17540 auto node1 = this->astCtxt->bvmul(
17546 auto node2 = this->astCtxt->bvmul(
17550 pck.push_back(this->astCtxt->bvadd(node1, node2));
17553 auto node = this->astCtxt->concat(pck);
17562 this->controlFlow_s(inst);
17574 std::vector<triton::ast::SharedAbstractNode> mskb;
17579 mskb.push_back(this->astCtxt->extract(255, 255, op2));
17580 mskb.push_back(this->astCtxt->extract(247, 247, op2));
17581 mskb.push_back(this->astCtxt->extract(239, 239, op2));
17582 mskb.push_back(this->astCtxt->extract(231, 231, op2));
17583 mskb.push_back(this->astCtxt->extract(223, 223, op2));
17584 mskb.push_back(this->astCtxt->extract(215, 215, op2));
17585 mskb.push_back(this->astCtxt->extract(207, 207, op2));
17586 mskb.push_back(this->astCtxt->extract(199, 199, op2));
17587 mskb.push_back(this->astCtxt->extract(191, 191, op2));
17588 mskb.push_back(this->astCtxt->extract(183, 183, op2));
17589 mskb.push_back(this->astCtxt->extract(175, 175, op2));
17590 mskb.push_back(this->astCtxt->extract(167, 167, op2));
17591 mskb.push_back(this->astCtxt->extract(159, 159, op2));
17592 mskb.push_back(this->astCtxt->extract(151, 151, op2));
17593 mskb.push_back(this->astCtxt->extract(143, 143, op2));
17594 mskb.push_back(this->astCtxt->extract(135, 135, op2));
17597 mskb.push_back(this->astCtxt->extract(127, 127, op2));
17598 mskb.push_back(this->astCtxt->extract(119, 119, op2));
17599 mskb.push_back(this->astCtxt->extract(111, 111, op2));
17600 mskb.push_back(this->astCtxt->extract(103, 103, op2));
17601 mskb.push_back(this->astCtxt->extract(95 , 95 , op2));
17602 mskb.push_back(this->astCtxt->extract(87 , 87 , op2));
17603 mskb.push_back(this->astCtxt->extract(79 , 79 , op2));
17604 mskb.push_back(this->astCtxt->extract(71 , 71 , op2));
17605 mskb.push_back(this->astCtxt->extract(63 , 63 , op2));
17606 mskb.push_back(this->astCtxt->extract(55 , 55 , op2));
17607 mskb.push_back(this->astCtxt->extract(47 , 47 , op2));
17608 mskb.push_back(this->astCtxt->extract(39 , 39 , op2));
17609 mskb.push_back(this->astCtxt->extract(31 , 31 , op2));
17610 mskb.push_back(this->astCtxt->extract(23 , 23 , op2));
17611 mskb.push_back(this->astCtxt->extract(15 , 15 , op2));
17612 mskb.push_back(this->astCtxt->extract(7 , 7 , op2));
17619 auto node = this->astCtxt->zx(
17621 this->astCtxt->concat(mskb)
17631 this->controlFlow_s(inst);
17641 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17642 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17645 std::vector<triton::ast::SharedAbstractNode> pck;
17651 pck.push_back(this->astCtxt->ite(
17652 this->astCtxt->bvuge(
17653 this->astCtxt->extract(high, low, op1),
17654 this->astCtxt->extract(high, low, op2)),
17655 this->astCtxt->extract(high, low, op2),
17656 this->astCtxt->extract(high, low, op1))
17660 auto node = this->astCtxt->concat(pck);
17669 this->controlFlow_s(inst);
17679 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17680 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17683 std::vector<triton::ast::SharedAbstractNode> pck;
17692 pck.push_back(node);
17694 auto node = this->astCtxt->concat(pck);
17703 this->controlFlow_s(inst);
17713 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17714 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17717 std::vector<triton::ast::SharedAbstractNode> pck;
17726 pck.push_back(node);
17728 auto node = this->astCtxt->concat(pck);
17737 this->controlFlow_s(inst);
17747 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17748 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17751 auto node = this->astCtxt->bvor(op2, op3);
17760 this->controlFlow_s(inst);
17775 std::vector<triton::ast::SharedAbstractNode> pack;
17783 this->astCtxt->extract(31, 0,
17784 this->astCtxt->bvlshr(
17786 this->astCtxt->bvmul(
17787 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(7, 6, op3)),
17788 this->astCtxt->bv(32, dstSize)
17794 this->astCtxt->extract(31, 0,
17795 this->astCtxt->bvlshr(
17797 this->astCtxt->bvmul(
17798 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(5, 4, op3)),
17799 this->astCtxt->bv(32, dstSize)
17805 this->astCtxt->extract(31, 0,
17806 this->astCtxt->bvlshr(
17808 this->astCtxt->bvmul(
17809 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(3, 2, op3)),
17810 this->astCtxt->bv(32, dstSize)
17816 this->astCtxt->extract(31, 0,
17817 this->astCtxt->bvlshr(
17819 this->astCtxt->bvmul(
17820 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(1, 0, op3)),
17821 this->astCtxt->bv(32, dstSize)
17830 this->astCtxt->extract(31, 0,
17831 this->astCtxt->bvlshr(
17833 this->astCtxt->bvmul(
17834 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(7, 6, op3)),
17835 this->astCtxt->bv(32, dstSize)
17841 this->astCtxt->extract(31, 0,
17842 this->astCtxt->bvlshr(
17844 this->astCtxt->bvmul(
17845 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(5, 4, op3)),
17846 this->astCtxt->bv(32, dstSize)
17852 this->astCtxt->extract(31, 0,
17853 this->astCtxt->bvlshr(
17855 this->astCtxt->bvmul(
17856 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(3, 2, op3)),
17857 this->astCtxt->bv(32, dstSize)
17863 this->astCtxt->extract(31, 0,
17864 this->astCtxt->bvlshr(
17866 this->astCtxt->bvmul(
17867 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(1, 0, op3)),
17868 this->astCtxt->bv(32, dstSize)
17879 auto node = this->astCtxt->concat(pack);
17888 this->controlFlow_s(inst);
17898 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17899 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17902 std::vector<triton::ast::SharedAbstractNode> pck;
17908 auto val = this->astCtxt->extract(high, low, op2);
17909 pck.push_back(this->astCtxt->ite(
17911 this->astCtxt->extract(high, low, op1),
17912 this->astCtxt->ite(
17914 this->astCtxt->bvneg(this->astCtxt->extract(high, low, op1)),
17919 auto node = this->astCtxt->concat(pck);
17925 this->taintEngine->
setTaint(dst,
false);
17928 this->controlFlow_s(inst);
17938 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17939 auto op2 = this->astCtxt->zx(
triton::bitsize::dqword - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
17944 std::vector<triton::ast::SharedAbstractNode> pck;
17950 pck.push_back(this->astCtxt->bvshl(
17951 this->astCtxt->extract(high, low, op1),
17952 this->astCtxt->bvmul(
17953 this->astCtxt->ite(
17963 node = pck.size() > 1 ? this->astCtxt->concat(pck) : pck[0];
17972 this->controlFlow_s(inst);
17982 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17983 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17986 std::vector<triton::ast::SharedAbstractNode> pck;
17989 auto shift = this->astCtxt->ite(
18005 pck.push_back(this->astCtxt->bvshl(this->astCtxt->extract(high, low, op1), shift));
18007 auto node = this->astCtxt->concat(pck);
18016 this->controlFlow_s(inst);
18026 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18027 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18030 std::vector<triton::ast::SharedAbstractNode> pck;
18033 auto shift = this->astCtxt->ite(
18049 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
18051 auto node = this->astCtxt->concat(pck);
18060 this->controlFlow_s(inst);
18070 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18071 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18074 std::vector<triton::ast::SharedAbstractNode> pck;
18077 auto shift = this->astCtxt->ite(
18093 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
18095 auto node = this->astCtxt->concat(pck);
18104 this->controlFlow_s(inst);
18114 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18115 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18118 std::vector<triton::ast::SharedAbstractNode> pck;
18121 auto shift = this->astCtxt->ite(
18138 pck.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(high, low, op1), shift));
18140 auto node = pck.size() > 1 ? this->astCtxt->concat(pck) : pck[0];
18149 this->controlFlow_s(inst);
18159 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18160 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18163 std::vector<triton::ast::SharedAbstractNode> pck;
18166 auto shift = this->astCtxt->ite(
18182 pck.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(high, low, op1), shift));
18184 auto node = this->astCtxt->concat(pck);
18193 this->controlFlow_s(inst);
18203 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18204 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18207 std::vector<triton::ast::SharedAbstractNode> pck;
18213 pck.push_back(this->astCtxt->bvsub(
18214 this->astCtxt->extract(high, low, op1),
18215 this->astCtxt->extract(high, low, op2))
18219 auto node = this->astCtxt->concat(pck);
18228 this->controlFlow_s(inst);
18238 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18239 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18242 std::vector<triton::ast::SharedAbstractNode> pck;
18248 pck.push_back(this->astCtxt->bvsub(
18249 this->astCtxt->extract(high, low, op1),
18250 this->astCtxt->extract(high, low, op2))
18254 auto node = this->astCtxt->concat(pck);
18263 this->controlFlow_s(inst);
18273 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18274 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18277 std::vector<triton::ast::SharedAbstractNode> pck;
18283 pck.push_back(this->astCtxt->bvsub(
18284 this->astCtxt->extract(high, low, op1),
18285 this->astCtxt->extract(high, low, op2))
18289 auto node = this->astCtxt->concat(pck);
18298 this->controlFlow_s(inst);
18308 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18309 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18312 std::vector<triton::ast::SharedAbstractNode> pck;
18318 pck.push_back(this->astCtxt->bvsub(
18319 this->astCtxt->extract(high, low, op1),
18320 this->astCtxt->extract(high, low, op2))
18324 auto node = this->astCtxt->concat(pck);
18333 this->controlFlow_s(inst);
18342 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18343 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18346 auto node1 = this->astCtxt->bvand(op1, op2);
18347 auto node2 = this->astCtxt->bvand(op1, this->astCtxt->bvnot(op2));
18354 expr1->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
18355 expr2->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
18358 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_AF),
"Clears adjust flag");
18359 this->cfPtest_s(inst, expr2, src1,
true);
18360 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
18361 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_PF),
"Clears parity flag");
18362 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_SF),
"Clears sign flag");
18363 this->zf_s(inst, expr1, src1,
true);
18366 this->controlFlow_s(inst);
18376 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18377 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18380 std::vector<triton::ast::SharedAbstractNode> unpack;
18381 unpack.reserve(dst.
getSize());
18389 unpack.push_back(this->astCtxt->extract(high, low, op2));
18390 unpack.push_back(this->astCtxt->extract(high, low, op1));
18394 auto node = this->astCtxt->concat(unpack);
18403 this->controlFlow_s(inst);
18413 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18414 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18417 std::vector<triton::ast::SharedAbstractNode> unpack;
18426 unpack.push_back(this->astCtxt->extract(high, low, op2));
18427 unpack.push_back(this->astCtxt->extract(high, low, op1));
18431 auto node = this->astCtxt->concat(unpack);
18440 this->controlFlow_s(inst);
18450 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18451 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18454 std::vector<triton::ast::SharedAbstractNode> unpack;
18463 unpack.push_back(this->astCtxt->extract(high, low, op2));
18464 unpack.push_back(this->astCtxt->extract(high, low, op1));
18468 auto node = this->astCtxt->concat(unpack);
18477 this->controlFlow_s(inst);
18487 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18488 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18491 std::vector<triton::ast::SharedAbstractNode> unpack;
18500 unpack.push_back(this->astCtxt->extract(high, low, op2));
18501 unpack.push_back(this->astCtxt->extract(high, low, op1));
18505 auto node = this->astCtxt->concat(unpack);
18514 this->controlFlow_s(inst);
18524 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18525 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18528 std::vector<triton::ast::SharedAbstractNode> unpack;
18529 unpack.reserve(dst.
getSize());
18537 unpack.push_back(this->astCtxt->extract(high, low, op2));
18538 unpack.push_back(this->astCtxt->extract(high, low, op1));
18542 auto node = this->astCtxt->concat(unpack);
18551 this->controlFlow_s(inst);
18561 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18562 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18565 std::vector<triton::ast::SharedAbstractNode> unpack;
18574 unpack.push_back(this->astCtxt->extract(high, low, op2));
18575 unpack.push_back(this->astCtxt->extract(high, low, op1));
18579 auto node = this->astCtxt->concat(unpack);
18588 this->controlFlow_s(inst);
18598 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18599 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18602 std::vector<triton::ast::SharedAbstractNode> unpack;
18611 unpack.push_back(this->astCtxt->extract(high, low, op2));
18612 unpack.push_back(this->astCtxt->extract(high, low, op1));
18616 auto node = this->astCtxt->concat(unpack);
18625 this->controlFlow_s(inst);
18635 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18636 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18639 std::vector<triton::ast::SharedAbstractNode> unpack;
18648 unpack.push_back(this->astCtxt->extract(high, low, op2));
18649 unpack.push_back(this->astCtxt->extract(high, low, op1));
18653 auto node = this->astCtxt->concat(unpack);
18662 this->controlFlow_s(inst);
18672 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
18673 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
18676 auto node = this->astCtxt->bvxor(op2, op3);
18685 this->controlFlow_s(inst);
18695 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18696 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18699 auto node = this->astCtxt->bvxor(op1, op2);
18708 this->controlFlow_s(inst);
18714 this->controlFlow_s(inst);
18720 this->controlFlow_s(inst);
18727 bool dstT = this->taintEngine->
isTainted(dst);
18734 auto node = this->astCtxt->bvadd(op1, op2);
18741 expr2->isTainted = this->taintEngine->
taintUnion(dst, src);
18742 expr1->isTainted = this->taintEngine->
setTaint(src, dstT);
18745 this->af_s(inst, expr2, dst, op1, op2);
18746 this->cfAdd_s(inst, expr2, dst, op1, op2);
18747 this->ofAdd_s(inst, expr2, dst, op1, op2);
18748 this->pf_s(inst, expr2, dst);
18749 this->sf_s(inst, expr2, dst);
18750 this->zf_s(inst, expr2, dst);
18753 this->controlFlow_s(inst);
18760 bool dstT = this->taintEngine->
isTainted(dst);
18761 bool srcT = this->taintEngine->
isTainted(src);
18776 expr1->isTainted = this->taintEngine->
setTaint(dst, srcT);
18777 expr2->isTainted = this->taintEngine->
setTaint(src, dstT);
18780 this->controlFlow_s(inst);
18793 auto node = this->astCtxt->bvxor(op1, op2);
18801 this->taintEngine->
setTaint(src,
false);
18803 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
18806 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
18807 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
18808 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
18809 this->pf_s(inst, expr, dst);
18810 this->sf_s(inst, expr, dst);
18811 this->zf_s(inst, expr, dst);
18814 this->controlFlow_s(inst);
18827 auto node = this->astCtxt->bvxor(op1, op2);
18833 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
18836 this->controlFlow_s(inst);
18849 auto node = this->astCtxt->bvxor(op1, op2);
18855 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
18858 this->controlFlow_s(inst);
The abstract architecture class.
TRITON_EXPORT const triton::arch::Register & getRegister(triton::arch::register_e id) const
Returns register from id.
TRITON_EXPORT const triton::arch::Register & getStackPointer(void) const
Returns the stack pointer register.
TRITON_EXPORT const triton::arch::Register & getProgramCounter(void) const
Returns the program counter register.
TRITON_EXPORT triton::uint512 getConcreteRegisterValue(const triton::arch::Register ®, bool execCallbacks=true) const
Returns the concrete value of a register.
TRITON_EXPORT bool isRegisterValid(triton::arch::register_e regId) const
Returns true if the register ID is a register or a flag.
TRITON_EXPORT triton::arch::architecture_e getArchitecture(void) const
Returns the kind of architecture as triton::arch::architecture_e.
TRITON_EXPORT const triton::arch::Register & getParentRegister(triton::arch::register_e id) const
Returns parent register from id.
This class is used to represent an instruction.
TRITON_EXPORT triton::uint32 getSize(void) const
Returns the size of the instruction.
TRITON_EXPORT void setConditionTaken(bool flag)
Sets flag to define if the condition is taken or not.
TRITON_EXPORT void setPrefix(triton::arch::x86::prefix_e prefix)
Sets the prefix of the instruction (mainly for X86).
TRITON_EXPORT triton::uint32 getType(void) const
Returns the type of the instruction.
TRITON_EXPORT void removeReadRegister(const triton::arch::Register ®)
Removes a read register.
TRITON_EXPORT triton::uint64 getAddress(void) const
Returns the address of the instruction.
TRITON_EXPORT void setUndefinedRegister(const triton::arch::Register ®)
Sets an undefined register.
std::vector< triton::arch::OperandWrapper > operands
A list of operands.
TRITON_EXPORT void removeWrittenRegister(const triton::arch::Register ®)
Removes a written register.
TRITON_EXPORT triton::arch::x86::prefix_e getPrefix(void) const
Returns the prefix of the instruction (mainly for X86).
TRITON_EXPORT triton::uint64 getNextAddress(void) const
Returns the next address of the instruction.
This class is used to represent a memory access.
TRITON_EXPORT const triton::arch::Register & getConstBaseRegister(void) const
LEA - Returns the base register operand.
TRITON_EXPORT triton::uint64 getAddress(void) const
Returns the address of the memory.
This class is used as operand wrapper.
TRITON_EXPORT triton::arch::Register & getRegister(void)
Returns the register operand.
TRITON_EXPORT triton::uint32 getLow(void) const
Returns the lower bit position of the abstract operand.
TRITON_EXPORT triton::arch::operand_e getType(void) const
Returns the abstract type of the operand.
TRITON_EXPORT triton::uint32 getSize(void) const
Returns the abstract size (in bytes) of the operand.
TRITON_EXPORT triton::arch::MemoryAccess & getMemory(void)
Returns the memory operand.
TRITON_EXPORT const triton::arch::Register & getConstRegister(void) const
Returns the register operand.
TRITON_EXPORT triton::uint32 getHigh(void) const
Returns the highest bit position of the abstract operand.
TRITON_EXPORT triton::uint32 getBitSize(void) const
Returns the abstract size (in bits) of the operand.
This class is used when an instruction has a register operand.
TRITON_EXPORT triton::arch::register_e getId(void) const
Returns the id of the register.
TRITON_EXPORT triton::uint32 getSize(void) const
Returns the size (in bytes) of the register.
TRITON_EXPORT x86Semantics(triton::arch::Architecture *architecture, triton::engines::symbolic::SymbolicEngine *symbolicEngine, triton::engines::taint::TaintEngine *taintEngine, const triton::modes::SharedModes &modes, const triton::ast::SharedAstContext &astCtxt)
Constructor.
TRITON_EXPORT triton::arch::exception_e buildSemantics(triton::arch::Instruction &inst)
Builds the semantics of the instruction. Returns triton::arch::NO_FAULT if succeed.
TRITON_EXPORT void pushPathConstraint(const triton::arch::Instruction &inst, const triton::engines::symbolic::SharedSymbolicExpression &expr)
Pushs constraints of a branch instruction to the path predicate.
The symbolic engine class.
TRITON_EXPORT const SharedSymbolicExpression & createSymbolicRegisterExpression(triton::arch::Instruction &inst, const triton::ast::SharedAbstractNode &node, const triton::arch::Register ®, const std::string &comment="")
Returns the new symbolic register expression expression and links this expression to the instruction.
TRITON_EXPORT const SharedSymbolicExpression & createSymbolicVolatileExpression(triton::arch::Instruction &inst, const triton::ast::SharedAbstractNode &node, const std::string &comment="")
Returns the new symbolic volatile expression expression and links this expression to the instruction.
TRITON_EXPORT void initLeaAst(triton::arch::MemoryAccess &mem, bool force=true)
Initializes the effective address of a memory access.
TRITON_EXPORT triton::ast::SharedAbstractNode getRegisterAst(const triton::arch::Register ®)
Returns the AST corresponding to the register.
TRITON_EXPORT const SharedSymbolicExpression & createSymbolicExpression(triton::arch::Instruction &inst, const triton::ast::SharedAbstractNode &node, const triton::arch::OperandWrapper &dst, const std::string &comment="")
Returns the new symbolic expression and links this expression to the instruction.
TRITON_EXPORT triton::ast::SharedAbstractNode getImmediateAst(const triton::arch::Immediate &imm)
Returns the AST corresponding to the immediate.
TRITON_EXPORT void concretizeRegister(const triton::arch::Register ®)
Concretizes a specific symbolic register.
TRITON_EXPORT triton::ast::SharedAbstractNode getOperandAst(const triton::arch::OperandWrapper &op)
Returns the AST corresponding to the operand.
TRITON_EXPORT bool setTaint(const triton::arch::OperandWrapper &op, bool flag)
Sets the flag (taint or untaint) to an abstract operand (Register or Memory).
TRITON_EXPORT bool untaintMemory(triton::uint64 addr)
Untaints an address. Returns !TAINTED if the address has been untainted correctly....
TRITON_EXPORT bool isTainted(const triton::arch::OperandWrapper &op) const
Abstract taint verification. Returns true if the operand is tainted.
TRITON_EXPORT bool taintUnion(const triton::arch::OperandWrapper &op1, const triton::arch::OperandWrapper &op2)
Abstract union tainting.
TRITON_EXPORT bool setTaintRegister(const triton::arch::Register ®, bool flag)
Sets the flag (taint or untaint) to a register.
TRITON_EXPORT bool taintAssignment(const triton::arch::OperandWrapper &op1, const triton::arch::OperandWrapper &op2)
Abstract assignment tainting.
TRITON_EXPORT bool isRegisterTainted(const triton::arch::Register ®) const
Returns true if the register is tainted.
The exception class used by all semantics.
std::shared_ptr< triton::ast::AbstractNode > SharedAbstractNode
Shared Abstract Node.
std::shared_ptr< triton::ast::AstContext > SharedAstContext
Shared AST context.
constexpr triton::uint32 byte
byte size in bit
constexpr triton::uint32 dword
dword size in bit
constexpr triton::uint32 qword
qword size in bit
constexpr triton::uint32 word
word size in bit
constexpr triton::uint32 dqword
dqword size in bit
constexpr triton::uint32 qqword
qqword size in bit
std::shared_ptr< triton::modes::Modes > SharedModes
Shared Modes.
@ CONCRETIZE_UNDEFINED_REGISTERS
[symbolic] Concretize every registers tagged as undefined (see #750).
constexpr triton::uint32 dword
dword size in byte
constexpr triton::uint32 word
word size in byte
constexpr triton::uint32 dqword
dqword size in byte
constexpr triton::uint32 byte
byte size in byte
constexpr triton::uint32 qword
qword size in byte
constexpr triton::uint32 qqword
qqword size in byte
std::shared_ptr< triton::engines::symbolic::SymbolicExpression > SharedSymbolicExpression
Shared Symbolic Expression.
const bool UNTAINTED
Defines an untainted item.
std::uint64_t uint64
unisgned 64-bits
std::uint32_t uint32
unisgned 32-bits
std::uint8_t uint8
unisgned 8-bits
@ ID_INS_PMOVZXBQ
PMOVZXBQ.
@ ID_INS_UNPCKHPS
UNPCKHPS.
@ ID_INS_MOVMSKPS
MOVMSKPS.
@ ID_INS_VPCMPEQW
VPCMPEQW.
@ ID_INS_EXTRACTPS
EXTRACTPS.
@ ID_INS_VPBROADCASTB
VPBROADCASTB.
@ ID_INS_UNPCKLPD
UNPCKLPD.
@ ID_INS_PMOVSXBW
PMOVSXBW.
@ ID_INS_PUNPCKHWD
PUNPCKHWD.
@ ID_INS_VPUNPCKHQDQ
VPUNPCKHQDQ.
@ ID_INS_PMOVMSKB
PMOVMSKB.
@ ID_INS_VPUNPCKHWD
VPUNPCKHWD.
@ ID_INS_FXSAVE64
FXSAVE64.
@ ID_INS_VMOVNTDQ
VMOVNTDQ.
@ ID_INS_PUNPCKLBW
PUNPCKLBW.
@ ID_INS_PREFETCHW
PREFETCHW.
@ ID_INS_MOVSLDUP
MOVSLDUP.
@ ID_INS_PUNPCKHBW
PUNPCKHBW.
@ ID_INS_VPACKUSWB
VPACKUSWB.
@ ID_INS_PREFETCHT2
PREFETCHT2.
@ ID_INS_VPCMPGTD
VPCMPGTD.
@ ID_INS_VPUNPCKLBW
VPUNPCKLBW.
@ ID_INS_PUNPCKLWD
PUNPCKLWD.
@ ID_INS_VPCMPEQD
VPCMPEQD.
@ ID_INS_PMOVZXBD
PMOVZXBD.
@ ID_INS_PACKSSWB
PACKSSWB.
@ ID_INS_SYSENTER
SYSENTER.
@ ID_INS_CMPXCHG8B
CMPXCHG8B.
@ ID_INS_PREFETCHNTA
PREFETCHNTA.
@ ID_INS_PUNPCKLQDQ
PUNPCKLQDQ.
@ ID_INS_VPMADDWD
VPMADDWD.
@ ID_INS_PMOVSXWD
PMOVSXWD.
@ ID_INS_UNPCKLPS
UNPCKLPS.
@ ID_INS_UNPCKHPD
UNPCKHPD.
@ ID_INS_PMOVSXWQ
PMOVSXWQ.
@ ID_INS_VPACKSSDW
VPACKSSDW.
@ ID_INS_PREFETCH
PREFETCH.
@ ID_INS_PMOVZXBW
PMOVZXBW.
@ ID_INS_VPUNPCKHBW
VPUNPCKHBW.
@ ID_INS_PMOVZXWD
PMOVZXWD.
@ ID_INS_VPERM2I128
VPERM2I128.
@ ID_INS_PACKUSWB
PACKUSWB.
@ ID_INS_PREFETCHT0
PREFETCHT0.
@ ID_INS_CMPXCHG16B
CMPXCHG16B.
@ ID_INS_VPCMPEQQ
VPCMPEQQ.
@ ID_INS_VPCMPEQB
VPCMPEQB.
@ ID_INS_PUNPCKHDQ
PUNPCKHDQ.
@ ID_INS_VPMOVMSKB
VPMOVMSKB.
@ ID_INS_PMOVSXBD
PMOVSXBD.
@ ID_INS_VPUNPCKLDQ
VPUNPCKLDQ.
@ ID_INS_MOVSHDUP
MOVSHDUP.
@ ID_INS_MOVMSKPD
MOVMSKPD.
@ ID_INS_PACKSSDW
PACKSSDW.
@ ID_INS_VPUNPCKLWD
VPUNPCKLWD.
@ ID_INS_PUNPCKLDQ
PUNPCKLDQ.
@ ID_INS_PMOVZXWQ
PMOVZXWQ.
@ ID_INS_VPCMPGTW
VPCMPGTW.
@ ID_INS_VEXTRACTI128
VEXTRACTI128.
@ ID_INS_PMOVSXDQ
PMOVSXDQ.
@ ID_INS_VPUNPCKLQDQ
VPUNPCKLQDQ.
@ ID_INS_VPCMPGTB
VPCMPGTB.
@ ID_INS_FXRSTOR64
FXRSTOR64.
@ ID_INS_PREFETCHT1
PREFETCHT1.
@ ID_INS_VPACKSSWB
VPACKSSWB.
@ ID_INS_VPUNPCKHDQ
VPUNPCKHDQ.
@ ID_INS_PMOVZXDQ
PMOVZXDQ.
@ ID_INS_PUNPCKHQDQ
PUNPCKHQDQ.
@ ID_INS_PMOVSXBQ
PMOVSXBQ.
@ ID_PREFIX_INVALID
invalid