430 this->architecture = architecture;
432 this->symbolicEngine = symbolicEngine;
433 this->taintEngine = taintEngine;
435 if (architecture ==
nullptr)
438 if (this->symbolicEngine ==
nullptr)
441 if (this->taintEngine ==
nullptr)
836 return this->exception;
845 auto op2 = this->astCtxt->bv(delta, dst.getBitSize());
848 auto node = this->astCtxt->bvadd(op1, op2);
854 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
866 auto op2 = this->astCtxt->bv(delta, dst.getBitSize());
869 auto node = this->astCtxt->bvsub(op1, op2);
875 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
884 auto node = this->astCtxt->bv(0, 1);
896 auto node = this->astCtxt->bv(1, 1);
925 auto op1 = this->symbolicEngine->
getOperandAst(inst, counter);
928 auto node1 = this->astCtxt->ite(
929 this->astCtxt->equal(op1, this->astCtxt->bv(0, counter.getBitSize())),
931 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, counter.getBitSize()))
935 auto node2 = this->astCtxt->ite(
936 this->astCtxt->equal(node1, this->astCtxt->bv(0, counter.getBitSize())),
938 this->astCtxt->bv(inst.
getAddress(), pc.getBitSize())
946 expr1->isTainted = this->taintEngine->
taintUnion(counter, counter);
953 auto op1 = this->symbolicEngine->
getOperandAst(inst, counter);
957 auto node1 = this->astCtxt->ite(
958 this->astCtxt->equal(op1, this->astCtxt->bv(0, counter.getBitSize())),
960 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, counter.getBitSize()))
964 auto node2 = this->astCtxt->ite(
966 this->astCtxt->equal(node1, this->astCtxt->bv(0, counter.getBitSize())),
967 this->astCtxt->equal(op2, this->astCtxt->bvfalse())
970 this->astCtxt->bv(inst.
getAddress(), pc.getBitSize())
978 expr1->isTainted = this->taintEngine->
taintUnion(counter, counter);
985 auto op1 = this->symbolicEngine->
getOperandAst(inst, counter);
989 auto node1 = this->astCtxt->ite(
990 this->astCtxt->equal(op1, this->astCtxt->bv(0, counter.getBitSize())),
992 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, counter.getBitSize()))
996 auto node2 = this->astCtxt->ite(
998 this->astCtxt->equal(node1, this->astCtxt->bv(0, counter.getBitSize())),
999 this->astCtxt->equal(op2, this->astCtxt->bvtrue())
1002 this->astCtxt->bv(inst.
getAddress(), pc.getBitSize())
1010 expr1->isTainted = this->taintEngine->
taintUnion(counter, counter);
1017 auto node = this->astCtxt->bv(inst.
getNextAddress(), pc.getBitSize());
1043 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0);
1044 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1);
1045 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2);
1046 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3);
1047 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4);
1048 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5);
1049 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6);
1050 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7);
1053 auto fraction_st0 = this->astCtxt->extract(62, 0, st0_ast);
1054 auto fraction_st1 = this->astCtxt->extract(62, 0, st1_ast);
1055 auto fraction_st2 = this->astCtxt->extract(62, 0, st2_ast);
1056 auto fraction_st3 = this->astCtxt->extract(62, 0, st3_ast);
1057 auto fraction_st4 = this->astCtxt->extract(62, 0, st4_ast);
1058 auto fraction_st5 = this->astCtxt->extract(62, 0, st5_ast);
1059 auto fraction_st6 = this->astCtxt->extract(62, 0, st6_ast);
1060 auto fraction_st7 = this->astCtxt->extract(62, 0, st7_ast);
1063 auto integer_st0 = this->astCtxt->extract(63, 63, st0_ast);
1064 auto integer_st1 = this->astCtxt->extract(63, 63, st1_ast);
1065 auto integer_st2 = this->astCtxt->extract(63, 63, st2_ast);
1066 auto integer_st3 = this->astCtxt->extract(63, 63, st3_ast);
1067 auto integer_st4 = this->astCtxt->extract(63, 63, st4_ast);
1068 auto integer_st5 = this->astCtxt->extract(63, 63, st5_ast);
1069 auto integer_st6 = this->astCtxt->extract(63, 63, st6_ast);
1070 auto integer_st7 = this->astCtxt->extract(63, 63, st7_ast);
1073 auto exponent_st0 = this->astCtxt->extract(79, 64, st0_ast);
1074 auto exponent_st1 = this->astCtxt->extract(79, 64, st1_ast);
1075 auto exponent_st2 = this->astCtxt->extract(79, 64, st2_ast);
1076 auto exponent_st3 = this->astCtxt->extract(79, 64, st3_ast);
1077 auto exponent_st4 = this->astCtxt->extract(79, 64, st4_ast);
1078 auto exponent_st5 = this->astCtxt->extract(79, 64, st5_ast);
1079 auto exponent_st6 = this->astCtxt->extract(79, 64, st6_ast);
1080 auto exponent_st7 = this->astCtxt->extract(79, 64, st7_ast);
1083 auto ea0_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0x0000, 16));
1084 auto ea0_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0x0000, 16));
1085 auto ea0_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0x0000, 16));
1086 auto ea0_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0x0000, 16));
1087 auto ea0_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0x0000, 16));
1088 auto ea0_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0x0000, 16));
1089 auto ea0_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0x0000, 16));
1090 auto ea0_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0x0000, 16));
1093 auto ea1_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0xFFFF, 16));
1094 auto ea1_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0xFFFF, 16));
1095 auto ea1_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0xFFFF, 16));
1096 auto ea1_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0xFFFF, 16));
1097 auto ea1_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0xFFFF, 16));
1098 auto ea1_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0xFFFF, 16));
1099 auto ea1_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0xFFFF, 16));
1100 auto ea1_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0xFFFF, 16));
1103 auto ena01_st0 = this->astCtxt->equal(this->astCtxt->lor(ea0_st0, ea1_st0), this->astCtxt->bvfalse());
1104 auto ena01_st1 = this->astCtxt->equal(this->astCtxt->lor(ea0_st1, ea1_st1), this->astCtxt->bvfalse());
1105 auto ena01_st2 = this->astCtxt->equal(this->astCtxt->lor(ea0_st2, ea1_st2), this->astCtxt->bvfalse());
1106 auto ena01_st3 = this->astCtxt->equal(this->astCtxt->lor(ea0_st3, ea1_st3), this->astCtxt->bvfalse());
1107 auto ena01_st4 = this->astCtxt->equal(this->astCtxt->lor(ea0_st4, ea1_st4), this->astCtxt->bvfalse());
1108 auto ena01_st5 = this->astCtxt->equal(this->astCtxt->lor(ea0_st5, ea1_st5), this->astCtxt->bvfalse());
1109 auto ena01_st6 = this->astCtxt->equal(this->astCtxt->lor(ea0_st6, ea1_st6), this->astCtxt->bvfalse());
1110 auto ena01_st7 = this->astCtxt->equal(this->astCtxt->lor(ea0_st7, ea1_st7), this->astCtxt->bvfalse());
1113 auto ib0_st0 = this->astCtxt->equal(integer_st0, this->astCtxt->bv(0, 1));
1114 auto ib0_st1 = this->astCtxt->equal(integer_st1, this->astCtxt->bv(0, 1));
1115 auto ib0_st2 = this->astCtxt->equal(integer_st2, this->astCtxt->bv(0, 1));
1116 auto ib0_st3 = this->astCtxt->equal(integer_st3, this->astCtxt->bv(0, 1));
1117 auto ib0_st4 = this->astCtxt->equal(integer_st4, this->astCtxt->bv(0, 1));
1118 auto ib0_st5 = this->astCtxt->equal(integer_st5, this->astCtxt->bv(0, 1));
1119 auto ib0_st6 = this->astCtxt->equal(integer_st6, this->astCtxt->bv(0, 1));
1120 auto ib0_st7 = this->astCtxt->equal(integer_st7, this->astCtxt->bv(0, 1));
1123 auto fa0_st0 = this->astCtxt->equal(fraction_st0, this->astCtxt->bv(0, 63));
1124 auto fa0_st1 = this->astCtxt->equal(fraction_st1, this->astCtxt->bv(0, 63));
1125 auto fa0_st2 = this->astCtxt->equal(fraction_st2, this->astCtxt->bv(0, 63));
1126 auto fa0_st3 = this->astCtxt->equal(fraction_st3, this->astCtxt->bv(0, 63));
1127 auto fa0_st4 = this->astCtxt->equal(fraction_st4, this->astCtxt->bv(0, 63));
1128 auto fa0_st5 = this->astCtxt->equal(fraction_st5, this->astCtxt->bv(0, 63));
1129 auto fa0_st6 = this->astCtxt->equal(fraction_st6, this->astCtxt->bv(0, 63));
1130 auto fa0_st7 = this->astCtxt->equal(fraction_st7, this->astCtxt->bv(0, 63));
1133 auto db_1_0 = this->astCtxt->ite(ea0_st0,
1134 this->astCtxt->ite(ib0_st0,
1135 this->astCtxt->ite(fa0_st0,
1136 this->astCtxt->bv(1, 2),
1137 this->astCtxt->bv(2, 2)),
1138 this->astCtxt->bv(2, 2)),
1139 this->astCtxt->ite(ena01_st0,
1140 this->astCtxt->ite(ib0_st0,
1141 this->astCtxt->bv(2, 2),
1142 this->astCtxt->bv(0, 2)),
1143 this->astCtxt->bv(2, 2)));
1145 auto db_3_2 = this->astCtxt->ite(ea0_st1,
1146 this->astCtxt->ite(ib0_st1,
1147 this->astCtxt->ite(fa0_st1,
1148 this->astCtxt->bv(1, 2),
1149 this->astCtxt->bv(2, 2)),
1150 this->astCtxt->bv(2, 2)),
1151 this->astCtxt->ite(ena01_st1,
1152 this->astCtxt->ite(ib0_st1,
1153 this->astCtxt->bv(2, 2),
1154 this->astCtxt->bv(0, 2)),
1155 this->astCtxt->bv(2, 2)));
1157 auto db_5_4 = this->astCtxt->ite(ea0_st2,
1158 this->astCtxt->ite(ib0_st2,
1159 this->astCtxt->ite(fa0_st2,
1160 this->astCtxt->bv(1, 2),
1161 this->astCtxt->bv(2, 2)),
1162 this->astCtxt->bv(2, 2)),
1163 this->astCtxt->ite(ena01_st2,
1164 this->astCtxt->ite(ib0_st2,
1165 this->astCtxt->bv(2, 2),
1166 this->astCtxt->bv(0, 2)),
1167 this->astCtxt->bv(2, 2)));
1169 auto db_7_6 = this->astCtxt->ite(ea0_st3,
1170 this->astCtxt->ite(ib0_st3,
1171 this->astCtxt->ite(fa0_st3,
1172 this->astCtxt->bv(1, 2),
1173 this->astCtxt->bv(2, 2)),
1174 this->astCtxt->bv(2, 2)),
1175 this->astCtxt->ite(ena01_st3,
1176 this->astCtxt->ite(ib0_st3,
1177 this->astCtxt->bv(2, 2),
1178 this->astCtxt->bv(0, 2)),
1179 this->astCtxt->bv(2, 2)));
1181 auto db_9_8 = this->astCtxt->ite(ea0_st4,
1182 this->astCtxt->ite(ib0_st4,
1183 this->astCtxt->ite(fa0_st4,
1184 this->astCtxt->bv(1, 2),
1185 this->astCtxt->bv(2, 2)),
1186 this->astCtxt->bv(2, 2)),
1187 this->astCtxt->ite(ena01_st4,
1188 this->astCtxt->ite(ib0_st4,
1189 this->astCtxt->bv(2, 2),
1190 this->astCtxt->bv(0, 2)),
1191 this->astCtxt->bv(2, 2)));
1193 auto db_11_10 = this->astCtxt->ite(ea0_st5,
1194 this->astCtxt->ite(ib0_st5,
1195 this->astCtxt->ite(fa0_st5,
1196 this->astCtxt->bv(1, 2),
1197 this->astCtxt->bv(2, 2)),
1198 this->astCtxt->bv(2, 2)),
1199 this->astCtxt->ite(ena01_st5,
1200 this->astCtxt->ite(ib0_st5,
1201 this->astCtxt->bv(2, 2),
1202 this->astCtxt->bv(0, 2)),
1203 this->astCtxt->bv(2, 2)));
1205 auto db_13_12 = this->astCtxt->ite(ea0_st6,
1206 this->astCtxt->ite(ib0_st6,
1207 this->astCtxt->ite(fa0_st6,
1208 this->astCtxt->bv(1, 2),
1209 this->astCtxt->bv(2, 2)),
1210 this->astCtxt->bv(2, 2)),
1211 this->astCtxt->ite(ena01_st6,
1212 this->astCtxt->ite(ib0_st6,
1213 this->astCtxt->bv(2, 2),
1214 this->astCtxt->bv(0, 2)),
1215 this->astCtxt->bv(2, 2)));
1217 auto db_15_14 = this->astCtxt->ite(ea0_st7,
1218 this->astCtxt->ite(ib0_st7,
1219 this->astCtxt->ite(fa0_st7,
1220 this->astCtxt->bv(1, 2),
1221 this->astCtxt->bv(2, 2)),
1222 this->astCtxt->bv(2, 2)),
1223 this->astCtxt->ite(ena01_st7,
1224 this->astCtxt->ite(ib0_st7,
1225 this->astCtxt->bv(2, 2),
1226 this->astCtxt->bv(0, 2)),
1227 this->astCtxt->bv(2, 2)));
1230 auto node = this->astCtxt->concat(db_15_14,
1231 this->astCtxt->concat(db_13_12,
1232 this->astCtxt->concat(db_11_10,
1233 this->astCtxt->concat(db_9_8,
1234 this->astCtxt->concat(db_7_6,
1235 this->astCtxt->concat(db_5_4,
1236 this->astCtxt->concat(db_3_2, db_1_0)))))));
1251 auto is_ftw_tainted = st0_taint | st1_taint | st2_taint | st3_taint |
1252 st4_taint | st5_taint | st6_taint | st7_taint;
1266 auto low = vol ? 0 : dst.
getLow();
1267 auto high = vol ? bvSize-1 : dst.
getHigh();
1273 auto node = this->astCtxt->ite(
1274 this->astCtxt->equal(
1275 this->astCtxt->bv(0x10, bvSize),
1276 this->astCtxt->bvand(
1277 this->astCtxt->bv(0x10, bvSize),
1278 this->astCtxt->bvxor(
1279 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
1280 this->astCtxt->bvxor(op1, op2)
1284 this->astCtxt->bv(1, 1),
1285 this->astCtxt->bv(0, 1)
1309 auto node = this->astCtxt->ite(
1311 this->astCtxt->bvugt(
1312 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, bvSize)),
1313 this->astCtxt->bv(9, bvSize)
1315 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
1317 this->astCtxt->bv(1, 1),
1318 this->astCtxt->bv(0, 1)
1336 auto low = vol ? 0 : dst.
getLow();
1337 auto high = vol ? bvSize-1 : dst.
getHigh();
1343 auto node = this->astCtxt->ite(
1344 this->astCtxt->equal(
1345 this->astCtxt->bv(0x10, bvSize),
1346 this->astCtxt->bvand(
1347 this->astCtxt->bv(0x10, bvSize),
1348 this->astCtxt->bvxor(
1350 this->astCtxt->extract(high, low, this->astCtxt->reference(parent))
1354 this->astCtxt->bv(1, 1),
1355 this->astCtxt->bv(0, 1)
1379 auto node = this->astCtxt->ite(
1381 this->astCtxt->bvugt(
1382 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, bvSize)),
1383 this->astCtxt->bv(9, bvSize)
1385 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
1387 this->astCtxt->bv(1, 1),
1388 this->astCtxt->bv(0, 1)
1407 auto low = vol ? 0 : dst.
getLow();
1408 auto high = vol ? bvSize-1 : dst.
getHigh();
1414 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
1415 this->astCtxt->bvxor(
1416 this->astCtxt->bvand(op1, op2),
1417 this->astCtxt->bvand(
1418 this->astCtxt->bvxor(
1419 this->astCtxt->bvxor(op1, op2),
1420 this->astCtxt->extract(high, low, this->astCtxt->reference(parent))
1422 this->astCtxt->bvxor(op1, op2))
1444 auto node = this->astCtxt->ite(
1445 this->astCtxt->equal(
1449 this->astCtxt->bv(0, 1),
1450 this->astCtxt->bv(1, 1)
1471 auto node = this->astCtxt->ite(
1472 this->astCtxt->equal(
1476 this->astCtxt->bv(1, 1),
1477 this->astCtxt->bv(0, 1)
1498 auto node = this->astCtxt->ite(
1499 this->astCtxt->equal(
1503 this->astCtxt->bv(1, 1),
1504 this->astCtxt->bv(0, 1)
1526 auto node = this->astCtxt->ite(
1527 this->astCtxt->equal(
1531 this->astCtxt->bv(0, 1),
1532 this->astCtxt->bv(1, 1)
1550 auto low = vol ? 0 : src.
getLow();
1551 auto high = vol ? bvSize-1 : src.
getHigh();
1557 auto node = this->astCtxt->ite(
1558 this->astCtxt->equal(
1559 this->astCtxt->extract(high, low, op1),
1560 this->astCtxt->bv(0, bvSize)
1562 this->astCtxt->bv(1, 1),
1563 this->astCtxt->bv(0, 1)
1584 auto node = this->astCtxt->ite(
1585 this->astCtxt->equal(
1589 this->astCtxt->bv(0, 1),
1590 this->astCtxt->bv(1, 1)
1611 auto node = this->astCtxt->ite(
1612 this->astCtxt->equal(
1616 this->astCtxt->bv(0, 1),
1617 this->astCtxt->bv(1, 1)
1634 auto low = vol ? 0 : dst.
getLow();
1635 auto high = vol ? bvSize-1 : dst.
getHigh();
1641 auto node = this->astCtxt->ite(
1642 this->astCtxt->equal(
1643 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
1644 this->astCtxt->bv(0, bvSize)
1646 this->astCtxt->bv(1, 1),
1647 this->astCtxt->bv(0, 1)
1664 auto bvSize = op2->getBitvectorSize();
1665 auto high = result->getBitvectorSize() - 1;
1668 auto node = this->astCtxt->ite(
1669 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1670 this->symbolicEngine->getOperandAst(cf),
1671 this->astCtxt->extract(high, high, result)
1677 if (op2->evaluate()) {
1679 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1694 auto bvSize = op2->getBitvectorSize();
1695 auto high = result->getBitvectorSize() - 1;
1698 auto node = this->astCtxt->ite(
1699 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1700 this->symbolicEngine->getOperandAst(cf),
1701 this->astCtxt->extract(high, high, result)
1707 if (op2->evaluate()) {
1709 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1723 auto bvSize = op2->getBitvectorSize();
1724 auto low = vol ? 0 : dst.
getLow();
1727 auto node = this->astCtxt->ite(
1728 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1729 this->symbolicEngine->getOperandAst(cf),
1730 this->astCtxt->extract(low, low, this->astCtxt->reference(parent))
1736 if (op2->evaluate()) {
1738 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1752 auto bvSize = op2->getBitvectorSize();
1753 auto high = vol ? bvSize-1 : dst.
getHigh();
1756 auto node = this->astCtxt->ite(
1757 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1758 this->symbolicEngine->getOperandAst(cf),
1759 this->astCtxt->extract(high, high, this->astCtxt->reference(parent))
1765 if (op2->evaluate()) {
1767 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1793 auto node = this->astCtxt->ite(
1794 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1795 this->symbolicEngine->getOperandAst(cf),
1797 this->astCtxt->bvugt(op2, this->astCtxt->bv(bvSize, bvSize)),
1798 this->astCtxt->extract(0, 0, this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize)))),
1799 this->astCtxt->extract(0, 0, this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(op2, this->astCtxt->bv(1, bvSize))))
1806 if (op2->evaluate()) {
1808 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1830 auto node = this->astCtxt->ite(
1831 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1832 this->symbolicEngine->getOperandAst(cf),
1833 this->astCtxt->extract(0, 0,
1834 this->astCtxt->bvlshr(
1836 this->astCtxt->bvsub(
1837 this->astCtxt->bv(bvSize, bvSize),
1847 if (op2->evaluate()) {
1849 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1865 auto bv1Size = op1->getBitvectorSize();
1866 auto bv2Size = op2->getBitvectorSize();
1867 auto bv3Size = op3->getBitvectorSize();
1874 auto node = this->astCtxt->ite(
1875 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
1876 this->symbolicEngine->getOperandAst(cf),
1877 this->astCtxt->extract(
1879 this->astCtxt->bvrol(
1880 this->astCtxt->concat(op2, op1),
1881 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
1889 if (op3->evaluate()) {
1891 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1913 auto node = this->astCtxt->ite(
1914 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
1915 this->symbolicEngine->getOperandAst(cf),
1916 this->astCtxt->extract(0, 0,
1917 this->astCtxt->bvlshr(
1919 this->astCtxt->bvsub(
1921 this->astCtxt->bv(1, bvSize))
1929 if (op2->evaluate()) {
1931 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1948 auto bv1Size = op1->getBitvectorSize();
1949 auto bv2Size = op2->getBitvectorSize();
1950 auto bv3Size = op3->getBitvectorSize();
1957 auto node = this->astCtxt->ite(
1958 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
1959 this->symbolicEngine->getOperandAst(cf),
1960 this->astCtxt->extract(
1961 (bvSize * 2) - 1, (bvSize * 2) - 1,
1962 this->astCtxt->bvror(
1963 this->astCtxt->concat(op2, op1),
1964 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
1972 if (op3->evaluate()) {
1974 expr->isTainted = this->taintEngine->
setTaintRegister(cf.getConstRegister(), parent->isTainted);
1990 auto low = vol ? 0 : dst.
getLow();
1991 auto high = vol ? bvSize-1 : dst.
getHigh();
1997 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
1998 this->astCtxt->bvxor(
1999 this->astCtxt->bvxor(op1, this->astCtxt->bvxor(op2, this->astCtxt->extract(high, low, this->astCtxt->reference(parent)))),
2000 this->astCtxt->bvand(
2001 this->astCtxt->bvxor(op1, this->astCtxt->extract(high, low, this->astCtxt->reference(parent))),
2002 this->astCtxt->bvxor(op1, op2)
2022 auto low = vol ? 0 : src.
getLow();
2023 auto high = vol ? bvSize-1 : src.
getHigh();
2029 auto node = this->astCtxt->ite(
2030 this->astCtxt->equal(
2031 this->astCtxt->extract(high, low, op1),
2032 this->astCtxt->bv(0, bvSize)
2034 this->astCtxt->bv(1, 1),
2035 this->astCtxt->bv(0, 1)
2054 auto low = vol ? 0 : dst.
getLow();
2055 auto high = vol ? bvSize-1 : dst.
getHigh();
2061 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
2062 this->astCtxt->bvand(
2063 this->astCtxt->bvxor(op1, this->astCtxt->bvnot(op2)),
2064 this->astCtxt->bvxor(op1, this->astCtxt->extract(high, low, this->astCtxt->reference(parent)))
2086 auto node = this->astCtxt->ite(
2087 this->astCtxt->equal(
2091 this->astCtxt->bv(0, 1),
2092 this->astCtxt->bv(1, 1)
2113 auto node = this->astCtxt->ite(
2114 this->astCtxt->equal(
2118 this->astCtxt->bv(0, 1),
2119 this->astCtxt->bv(1, 1)
2137 auto low = vol ? 0 : dst.
getLow();
2138 auto high = vol ? bvSize-1 : dst.
getHigh();
2144 auto node = this->astCtxt->extract(0, 0,
2145 this->astCtxt->bvlshr(
2146 this->astCtxt->bvand(this->astCtxt->extract(high, low, this->astCtxt->reference(parent)), op1),
2147 this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize))
2166 auto high = vol ? bvSize-1 : dst.
getHigh();
2170 auto node = this->astCtxt->ite(
2171 this->astCtxt->equal(this->astCtxt->zx(bvSize - op2->getBitvectorSize(), op2), this->astCtxt->bv(1, bvSize)),
2172 this->astCtxt->bvxor(
2173 this->astCtxt->extract(high, high, this->astCtxt->reference(parent)),
2174 this->symbolicEngine->getOperandAst(inst, cf)
2176 this->symbolicEngine->getOperandAst(of)
2182 if (op2->evaluate()) {
2184 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2199 auto bvSize = op2->getBitvectorSize();
2200 auto high = vol ? bvSize-1 : dst.
getHigh();
2203 auto node = this->astCtxt->ite(
2204 this->astCtxt->equal(op2, this->astCtxt->bv(1, bvSize)),
2205 this->astCtxt->bvxor(
2206 this->astCtxt->extract(high, high, this->astCtxt->reference(parent)),
2207 this->astCtxt->extract(high-1, high-1, this->astCtxt->reference(parent))
2209 this->symbolicEngine->getOperandAst(of)
2215 if (op2->evaluate()) {
2217 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2232 auto bvSize = op2->getBitvectorSize();
2237 auto node = this->astCtxt->ite(
2238 this->astCtxt->equal(op2, this->astCtxt->bv(1, bvSize)),
2239 this->astCtxt->bvxor(
2240 this->astCtxt->extract(high, high, op1),
2241 this->symbolicEngine->getOperandAst(inst, cf)
2243 this->symbolicEngine->getOperandAst(of)
2249 if (op2->evaluate()) {
2251 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2273 auto node = this->astCtxt->ite(
2274 this->astCtxt->land(
2275 this->astCtxt->equal(
2277 this->astCtxt->reference(parent),
2278 this->astCtxt->reference(parent)
2281 this->astCtxt->equal(
2283 this->astCtxt->bv(1, bvSize)
2286 this->astCtxt->bv(0, 1),
2287 this->symbolicEngine->getOperandAst(of)
2293 if (op2->evaluate()) {
2295 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2317 auto node = this->astCtxt->ite(
2318 this->astCtxt->equal(
2320 this->astCtxt->bv(1, bvSize)),
2321 this->astCtxt->extract(0, 0,
2322 this->astCtxt->bvxor(
2323 this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize))),
2324 this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(2, bvSize)))
2327 this->symbolicEngine->getOperandAst(of)
2333 if (op2->evaluate()) {
2335 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2352 auto bv1Size = op1->getBitvectorSize();
2353 auto bv2Size = op2->getBitvectorSize();
2354 auto bv3Size = op3->getBitvectorSize();
2361 auto node = this->astCtxt->ite(
2362 this->astCtxt->equal(
2363 this->astCtxt->zx(bvSize - bv3Size, op3),
2364 this->astCtxt->bv(1, bvSize)),
2365 this->astCtxt->bvxor(
2366 this->astCtxt->extract(
2368 this->astCtxt->bvrol(
2369 this->astCtxt->concat(op2, op1),
2370 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2373 this->astCtxt->extract(bvSize-1, bvSize-1, op1)
2375 this->symbolicEngine->getOperandAst(of)
2381 if (op3->evaluate()) {
2383 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2405 auto node = this->astCtxt->ite(
2406 this->astCtxt->equal(
2408 this->astCtxt->bv(1, bvSize)),
2409 this->astCtxt->extract(0, 0, this->astCtxt->bvlshr(op1, this->astCtxt->bvsub(this->astCtxt->bv(bvSize, bvSize), this->astCtxt->bv(1, bvSize)))),
2410 this->symbolicEngine->getOperandAst(of)
2416 if (op2->evaluate()) {
2418 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2435 auto bv1Size = op1->getBitvectorSize();
2436 auto bv2Size = op2->getBitvectorSize();
2437 auto bv3Size = op3->getBitvectorSize();
2444 auto node = this->astCtxt->ite(
2445 this->astCtxt->equal(
2446 this->astCtxt->zx(bvSize - op3->getBitvectorSize(), op3),
2447 this->astCtxt->bv(1, bvSize)),
2448 this->astCtxt->bvxor(
2449 this->astCtxt->extract(
2450 bvSize - 1, bvSize - 1,
2451 this->astCtxt->bvror(
2452 this->astCtxt->concat(op2, op1),
2453 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2458 this->symbolicEngine->getOperandAst(of)
2464 if (op3->evaluate()) {
2466 expr->isTainted = this->taintEngine->
setTaintRegister(of.getConstRegister(), parent->isTainted);
2482 auto low = vol ? 0 : dst.
getLow();
2483 auto high = vol ? bvSize-1 : dst.
getHigh();
2489 auto node = this->astCtxt->extract(bvSize-1, bvSize-1,
2490 this->astCtxt->bvand(
2491 this->astCtxt->bvxor(op1, op2),
2492 this->astCtxt->bvxor(op1, this->astCtxt->extract(high, low, this->astCtxt->reference(parent)))
2509 auto low = vol ? 0 : dst.
getLow();
2518 auto node = this->astCtxt->bv(1, 1);
2520 node = this->astCtxt->bvxor(node, this->astCtxt->extract(counter, counter, this->astCtxt->reference(parent)));
2538 auto low = vol ? 0 : dst.
getLow();
2546 auto node1 = this->astCtxt->bv(1, 1);
2548 node1 = this->astCtxt->bvxor(node1, this->astCtxt->extract(counter, counter, this->astCtxt->reference(parent)));
2551 auto node2 = this->astCtxt->ite(
2552 this->astCtxt->equal(this->astCtxt->zx(bvSize - op2->getBitvectorSize(), op2), this->astCtxt->bv(0, bvSize)),
2553 this->symbolicEngine->getOperandAst(pf),
2560 if (op2->evaluate()) {
2562 expr->isTainted = this->taintEngine->
setTaintRegister(pf.getConstRegister(), parent->isTainted);
2576 auto high = vol ? bvSize-1 : dst.
getHigh();
2582 auto node = this->astCtxt->extract(high, high, this->astCtxt->reference(parent));
2599 auto high = vol ? bvSize-1 : dst.
getHigh();
2606 auto node = this->astCtxt->ite(
2607 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize)),
2608 this->symbolicEngine->getOperandAst(sf),
2609 this->astCtxt->extract(high, high, this->astCtxt->reference(parent))
2615 if (op2->evaluate()) {
2617 expr->isTainted = this->taintEngine->
setTaintRegister(sf.getConstRegister(), parent->isTainted);
2634 auto bv1Size = op1->getBitvectorSize();
2635 auto bv2Size = op2->getBitvectorSize();
2636 auto bv3Size = op3->getBitvectorSize();
2643 auto node = this->astCtxt->ite(
2644 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
2645 this->symbolicEngine->getOperandAst(sf),
2646 this->astCtxt->extract(
2648 this->astCtxt->bvrol(
2649 this->astCtxt->concat(op2, op1),
2650 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2658 if (op3->evaluate()) {
2660 expr->isTainted = this->taintEngine->
setTaintRegister(sf.getConstRegister(), parent->isTainted);
2677 auto bv1Size = op1->getBitvectorSize();
2678 auto bv2Size = op2->getBitvectorSize();
2679 auto bv3Size = op3->getBitvectorSize();
2686 auto node = this->astCtxt->ite(
2687 this->astCtxt->equal(op3, this->astCtxt->bv(0, bv3Size)),
2688 this->symbolicEngine->getOperandAst(sf),
2689 this->astCtxt->extract(
2690 bvSize - 1, bvSize - 1,
2691 this->astCtxt->bvror(
2692 this->astCtxt->concat(op2, op1),
2693 this->astCtxt->zx(((bv1Size + bv2Size) - bv3Size), op3)
2701 if (op3->evaluate()) {
2703 expr->isTainted = this->taintEngine->
setTaintRegister(sf.getConstRegister(), parent->isTainted);
2717 auto low = vol ? 0 : dst.
getLow();
2718 auto high = vol ? bvSize-1 : dst.
getHigh();
2724 auto node = this->astCtxt->ite(
2725 this->astCtxt->equal(
2726 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
2727 this->astCtxt->bv(0, bvSize)
2729 this->astCtxt->bv(1, 1),
2730 this->astCtxt->bv(0, 1)
2751 auto node = this->astCtxt->ite(
2752 this->astCtxt->equal(op2, this->astCtxt->bv(0, src.
getBitSize())),
2753 this->astCtxt->bvtrue(),
2754 this->astCtxt->bvfalse()
2772 auto low = vol ? 0 : dst.
getLow();
2773 auto high = vol ? bvSize-1 : dst.
getHigh();
2780 auto node = this->astCtxt->ite(
2781 this->astCtxt->equal(this->astCtxt->zx(bvSize - op2->getBitvectorSize(), op2), this->astCtxt->bv(0, bvSize)),
2782 this->symbolicEngine->getOperandAst(zf),
2784 this->astCtxt->equal(
2785 this->astCtxt->extract(high, low, this->astCtxt->reference(parent)),
2786 this->astCtxt->bv(0, bvSize)
2788 this->astCtxt->bv(1, 1),
2789 this->astCtxt->bv(0, 1)
2796 if (op2->evaluate()) {
2798 expr->isTainted = this->taintEngine->
setTaintRegister(zf.getConstRegister(), parent->isTainted);
2819 auto node = this->astCtxt->ite(
2822 this->astCtxt->bvugt(
2823 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize())),
2824 this->astCtxt->bv(9, src1.getBitSize())
2826 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
2829 this->astCtxt->concat(
2830 this->astCtxt->bvadd(op2, this->astCtxt->bv(1, src2.getBitSize())),
2831 this->astCtxt->bvand(
2832 this->astCtxt->bvadd(op1, this->astCtxt->bv(6, src1.getBitSize())),
2833 this->astCtxt->bv(0xf, src1.getBitSize())
2837 this->astCtxt->concat(
2839 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize()))
2847 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2850 this->afAaa_s(inst, expr, dsttmp, op1, op3);
2851 this->cfAaa_s(inst, expr, dsttmp, op1, op3);
2854 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
2855 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
2856 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
2857 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
2860 this->controlFlow_s(inst);
2881 auto node = this->astCtxt->zx(
2883 this->astCtxt->bvadd(
2885 this->astCtxt->bvmul(op3, op1)
2893 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2896 this->pf_s(inst, expr, dsttmp);
2897 this->sf_s(inst, expr, dsttmp);
2898 this->zf_s(inst, expr, dsttmp);
2901 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
2902 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
2903 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
2906 this->controlFlow_s(inst);
2925 auto node = this->astCtxt->concat(
2926 this->astCtxt->bvudiv(op2, op1),
2927 this->astCtxt->bvurem(op2, op1)
2934 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2937 this->pf_s(inst, expr, dsttmp);
2938 this->sf_s(inst, expr, dsttmp);
2939 this->zf_s(inst, expr, dsttmp);
2942 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
2943 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
2944 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
2947 this->controlFlow_s(inst);
2964 auto node = this->astCtxt->ite(
2967 this->astCtxt->bvugt(
2968 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize())),
2969 this->astCtxt->bv(9, src1.getBitSize())
2971 this->astCtxt->equal(op3, this->astCtxt->bvtrue())
2974 this->astCtxt->concat(
2975 this->astCtxt->bvsub(op2, this->astCtxt->bv(1, src2.getBitSize())),
2976 this->astCtxt->bvand(
2977 this->astCtxt->bvsub(op1, this->astCtxt->bv(6, src1.getBitSize())),
2978 this->astCtxt->bv(0xf, src1.getBitSize())
2982 this->astCtxt->concat(
2984 this->astCtxt->bvand(op1, this->astCtxt->bv(0xf, src1.getBitSize()))
2992 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
2995 this->afAaa_s(inst, expr, dsttmp, op1, op3);
2996 this->cfAaa_s(inst, expr, dsttmp, op1, op3);
2999 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3000 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3001 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3002 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
3005 this->controlFlow_s(inst);
3020 auto node = this->astCtxt->bvadd(this->astCtxt->bvadd(op1, op2), this->astCtxt->zx(dst.
getBitSize()-1, op3));
3026 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3027 expr->isTainted = this->taintEngine->
taintUnion(dst, cf);
3030 this->af_s(inst, expr, dst, op1, op2);
3031 this->cfAdd_s(inst, expr, dst, op1, op2);
3032 this->ofAdd_s(inst, expr, dst, op1, op2);
3033 this->pf_s(inst, expr, dst);
3034 this->sf_s(inst, expr, dst);
3035 this->zf_s(inst, expr, dst);
3038 this->controlFlow_s(inst);
3053 auto node = this->astCtxt->bvadd(this->astCtxt->bvadd(op1, op2), this->astCtxt->zx(dst.
getBitSize()-1, op3));
3059 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3060 expr->isTainted = this->taintEngine->
taintUnion(dst, cf);
3063 this->cfAdd_s(inst, expr, dst, op1, op2);
3066 this->controlFlow_s(inst);
3079 auto node = this->astCtxt->bvadd(op1, op2);
3085 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3088 this->af_s(inst, expr, dst, op1, op2);
3089 this->cfAdd_s(inst, expr, dst, op1, op2);
3090 this->ofAdd_s(inst, expr, dst, op1, op2);
3091 this->pf_s(inst, expr, dst);
3092 this->sf_s(inst, expr, dst);
3093 this->zf_s(inst, expr, dst);
3096 this->controlFlow_s(inst);
3109 auto node = this->astCtxt->bvand(op1, op2);
3115 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3118 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
3119 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3120 this->pf_s(inst, expr, dst);
3121 this->sf_s(inst, expr, dst);
3122 this->zf_s(inst, expr, dst);
3125 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3128 this->controlFlow_s(inst);
3142 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op2), op3);
3150 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
3151 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3152 this->sf_s(inst, expr, dst);
3153 this->zf_s(inst, expr, dst);
3156 this->controlFlow_s(inst);
3169 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op1), op2);
3175 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3178 this->controlFlow_s(inst);
3191 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op1), op2);
3197 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3200 this->controlFlow_s(inst);
3213 auto node = this->astCtxt->bvand(op1, op2);
3219 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3222 this->controlFlow_s(inst);
3235 auto node = this->astCtxt->bvand(op1, op2);
3241 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
3244 this->controlFlow_s(inst);
3258 auto node = this->astCtxt->bvand(
3259 this->astCtxt->bvlshr(
3263 this->astCtxt->bvsub(
3264 this->astCtxt->bvshl(
3265 this->astCtxt->bv(1, src1.getBitSize()),
3268 this->astCtxt->bv(1, src1.getBitSize())
3279 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
3280 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3281 this->zf_s(inst, expr, dst);
3284 this->controlFlow_s(inst);
3296 auto node = this->astCtxt->bvand(this->astCtxt->bvneg(op1), op1);
3305 this->cfBlsi_s(inst, expr, src, op1);
3306 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3307 this->sf_s(inst, expr, dst);
3308 this->zf_s(inst, expr, dst);
3311 this->controlFlow_s(inst);
3323 auto node = this->astCtxt->bvxor(
3324 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, src.
getBitSize())),
3335 this->cfBlsmsk_s(inst, expr, src, op1);
3336 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3337 this->sf_s(inst, expr, dst);
3338 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF),
"Clears zero flag");
3341 this->controlFlow_s(inst);
3353 auto node = this->astCtxt->bvand(
3354 this->astCtxt->bvsub(op1, this->astCtxt->bv(1, src.
getBitSize())),
3365 this->cfBlsr_s(inst, expr, src, op1);
3366 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
3367 this->sf_s(inst, expr, dst);
3368 this->zf_s(inst, expr, dst);
3371 this->controlFlow_s(inst);
3389 node = this->astCtxt->ite(
3390 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3392 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3393 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3394 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3395 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3396 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3397 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3398 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3399 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3400 this->astCtxt->bv(0, bvSize1)
3405 node = this->astCtxt->ite(
3406 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3408 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3409 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3410 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3411 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3412 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3413 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3414 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3415 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3416 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3417 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3418 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3419 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3420 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3421 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3422 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3423 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3424 this->astCtxt->bv(0, bvSize1)
3429 node = this->astCtxt->ite(
3430 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3432 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3433 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3434 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3435 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3436 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3437 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3438 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3439 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3440 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3441 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3442 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3443 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3444 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3445 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3446 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3447 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3448 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3449 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3450 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3451 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3452 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3453 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3454 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3455 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3456 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3457 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3458 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3459 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3460 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3461 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3462 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3463 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3464 this->astCtxt->bv(0, bvSize1)
3465 ))))))))))))))))))))))))))))))))
3469 node = this->astCtxt->ite(
3470 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3472 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3473 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3474 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3475 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3476 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3477 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3478 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3479 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3480 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3481 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3482 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3483 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3484 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3485 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3486 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3487 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3488 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3489 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3490 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3491 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3492 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3493 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3494 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3495 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3496 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3497 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3498 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3499 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3500 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3501 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3502 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3503 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3504 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(32, 32, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
3505 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(33, 33, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
3506 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(34, 34, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
3507 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(35, 35, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
3508 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(36, 36, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
3509 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(37, 37, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
3510 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(38, 38, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
3511 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(39, 39, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
3512 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(40, 40, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
3513 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(41, 41, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
3514 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(42, 42, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
3515 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(43, 43, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
3516 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(44, 44, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
3517 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(45, 45, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
3518 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(46, 46, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
3519 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(47, 47, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
3520 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(48, 48, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
3521 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(49, 49, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
3522 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(50, 50, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
3523 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(51, 51, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
3524 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(52, 52, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
3525 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(53, 53, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
3526 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(54, 54, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
3527 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(55, 55, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
3528 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(56, 56, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
3529 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(57, 57, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
3530 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(58, 58, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
3531 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(59, 59, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
3532 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(60, 60, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
3533 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(61, 61, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
3534 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(62, 62, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
3535 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(63, 63, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
3536 this->astCtxt->bv(0, bvSize1)
3537 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
3551 this->zfBsf_s(inst, expr, src, op2);
3554 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3555 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
3556 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3557 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3558 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3561 this->controlFlow_s(inst);
3579 node = this->astCtxt->ite(
3580 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3582 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3583 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3584 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3585 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3586 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3587 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3588 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3589 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3590 this->astCtxt->bv(0, bvSize1)
3595 node = this->astCtxt->ite(
3596 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3598 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3599 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3600 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3601 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3602 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3603 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3604 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3605 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3606 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3607 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3608 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3609 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3610 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3611 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3612 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3613 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3614 this->astCtxt->bv(0, bvSize1)
3619 node = this->astCtxt->ite(
3620 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3622 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3623 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3624 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3625 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3626 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3627 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3628 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3629 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3630 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3631 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3632 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3633 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3634 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3635 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3636 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3637 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3638 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3639 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3640 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3641 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3642 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3643 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3644 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3645 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3646 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3647 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3648 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3649 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3650 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3651 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3652 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3653 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3654 this->astCtxt->bv(0, bvSize1)
3655 ))))))))))))))))))))))))))))))))
3659 node = this->astCtxt->ite(
3660 this->astCtxt->equal(op2, this->astCtxt->bv(0, bvSize2)),
3662 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(63, 63, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
3663 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(62, 62, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
3664 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(61, 61, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
3665 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(60, 60, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
3666 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(59, 59, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
3667 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(58, 58, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
3668 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(57, 57, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
3669 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(56, 56, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
3670 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(55, 55, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
3671 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(54, 54, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
3672 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(53, 53, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
3673 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(52, 52, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
3674 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(51, 51, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
3675 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(50, 50, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
3676 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(49, 49, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
3677 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(48, 48, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
3678 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(47, 47, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
3679 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(46, 46, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
3680 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(45, 45, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
3681 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(44, 44, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
3682 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(43, 43, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
3683 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(42, 42, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
3684 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(41, 41, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
3685 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(40, 40, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
3686 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(39, 39, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
3687 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(38, 38, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
3688 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(37, 37, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
3689 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(36, 36, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
3690 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(35, 35, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
3691 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(34, 34, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
3692 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(33, 33, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
3693 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(32, 32, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
3694 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
3695 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
3696 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
3697 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
3698 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
3699 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
3700 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
3701 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
3702 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
3703 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
3704 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
3705 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
3706 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
3707 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
3708 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
3709 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
3710 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
3711 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
3712 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
3713 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
3714 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
3715 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
3716 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
3717 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
3718 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
3719 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
3720 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
3721 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
3722 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
3723 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
3724 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
3725 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op2), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
3726 this->astCtxt->bv(0, bvSize1)
3727 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
3741 this->zfBsf_s(inst, expr, src, op2);
3744 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3745 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
3746 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3747 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3748 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3751 this->controlFlow_s(inst);
3762 std::list<triton::ast::SharedAbstractNode> bytes;
3765 bytes.push_front(this->astCtxt->extract(63, 56, op1));
3766 bytes.push_front(this->astCtxt->extract(55, 48, op1));
3767 bytes.push_front(this->astCtxt->extract(47, 40, op1));
3768 bytes.push_front(this->astCtxt->extract(39, 32, op1));
3770 bytes.push_front(this->astCtxt->extract(31, 24, op1));
3771 bytes.push_front(this->astCtxt->extract(23, 16, op1));
3772 bytes.push_front(this->astCtxt->extract(15, 8, op1));
3773 bytes.push_front(this->astCtxt->extract(7, 0, op1));
3777 bytes.push_front(this->astCtxt->bv(0, 8));
3778 bytes.push_front(this->astCtxt->bv(0, 8));
3784 auto node = this->astCtxt->concat(bytes);
3799 this->controlFlow_s(inst);
3810 auto op2 = this->astCtxt->zx(src1.getBitSize() - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
3813 auto node = this->astCtxt->extract(0, 0,
3814 this->astCtxt->bvlshr(
3816 this->astCtxt->bvsmod(
3818 this->astCtxt->bv(src1.getBitSize(), src1.getBitSize())
3827 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
3828 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
3831 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3832 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3833 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3834 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3837 this->controlFlow_s(inst);
3848 auto op2 = this->astCtxt->zx(dst2.getBitSize() - src1.getBitSize(), this->symbolicEngine->getOperandAst(inst, src1));
3851 auto node1 = this->astCtxt->extract(0, 0,
3852 this->astCtxt->bvlshr(
3854 this->astCtxt->bvsmod(
3856 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3860 auto node2 = this->astCtxt->ite(
3861 this->astCtxt->equal(node1, this->astCtxt->bvfalse()),
3863 this->astCtxt->bvor(
3865 this->astCtxt->bvshl(
3866 this->astCtxt->bv(1, dst2.getBitSize()),
3867 this->astCtxt->bvsmod(
3869 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3874 this->astCtxt->bvand(
3876 this->astCtxt->bvsub(
3878 this->astCtxt->bvshl(
3879 this->astCtxt->bv(1, dst2.getBitSize()),
3880 this->astCtxt->bvsmod(
3882 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3894 expr1->isTainted = this->taintEngine->
taintUnion(dst1, dst2);
3895 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src1);
3896 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
3899 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3900 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3901 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3902 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3905 this->controlFlow_s(inst);
3916 auto op2 = this->astCtxt->zx(dst2.getBitSize() - src1.getBitSize(), this->symbolicEngine->getOperandAst(inst, src1));
3919 auto node1 = this->astCtxt->extract(0, 0,
3920 this->astCtxt->bvlshr(
3922 this->astCtxt->bvsmod(
3924 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3928 auto node2 = this->astCtxt->ite(
3929 this->astCtxt->equal(node1, this->astCtxt->bvfalse()),
3931 this->astCtxt->bvand(
3933 this->astCtxt->bvsub(
3935 this->astCtxt->bvshl(
3936 this->astCtxt->bv(1, dst2.getBitSize()),
3937 this->astCtxt->bvsmod(
3939 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3951 expr1->isTainted = this->taintEngine->
taintUnion(dst1, dst2);
3952 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src1);
3953 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
3956 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
3957 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
3958 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
3959 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
3962 this->controlFlow_s(inst);
3973 auto op2 = this->astCtxt->zx(dst2.getBitSize() - src1.getBitSize(), this->symbolicEngine->getOperandAst(inst, src1));
3976 auto node1 = this->astCtxt->extract(0, 0,
3977 this->astCtxt->bvlshr(
3979 this->astCtxt->bvsmod(
3981 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
3985 auto node2 = this->astCtxt->bvor(
3987 this->astCtxt->bvshl(
3988 this->astCtxt->bv(1, dst2.getBitSize()),
3989 this->astCtxt->bvsmod(
3991 this->astCtxt->bv(dst2.getBitSize(), dst2.getBitSize())
4001 expr1->isTainted = this->taintEngine->
taintUnion(dst1, dst2);
4002 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src1);
4003 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
4006 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
4007 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
4008 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
4009 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
4012 this->controlFlow_s(inst);
4024 auto stackValue = alignSubStack_s(inst, stack.getSize());
4028 auto node1 = this->astCtxt->bv(inst.
getNextAddress(), pc.getBitSize());
4040 expr1->isTainted = this->taintEngine->
untaintMemory(sp.getMemory());
4064 this->controlFlow_s(inst);
4094 this->controlFlow_s(inst);
4114 this->controlFlow_s(inst);
4119 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
4121 this->controlFlow_s(inst);
4126 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_DF),
"Clears direction flag");
4128 this->controlFlow_s(inst);
4134 this->controlFlow_s(inst);
4162 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4165 this->controlFlow_s(inst);
4170 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_IF),
"Clears interrupt flag");
4172 this->controlFlow_s(inst);
4183 auto node = this->astCtxt->bvnot(op1);
4192 this->controlFlow_s(inst);
4209 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvand(this->astCtxt->bvnot(op3), this->astCtxt->bvnot(op4)), this->astCtxt->bvtrue()), op2, op1);
4215 if (op3->evaluate().is_zero() && op4->evaluate().is_zero()) {
4220 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4223 expr->isTainted |= this->taintEngine->
isTainted(cf) || this->taintEngine->
isTainted(zf);
4226 this->controlFlow_s(inst);
4241 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4247 if (op3->evaluate().is_zero()) {
4252 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4255 expr->isTainted |= this->taintEngine->
isTainted(cf);
4258 this->controlFlow_s(inst);
4273 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4279 if (!op3->evaluate().is_zero()) {
4284 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4287 expr->isTainted |= this->taintEngine->
isTainted(cf);
4290 this->controlFlow_s(inst);
4307 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(op3, op4), this->astCtxt->bvtrue()), op2, op1);
4313 if (!op3->evaluate().is_zero() || !op4->evaluate().is_zero()) {
4318 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4321 expr->isTainted |= this->taintEngine->
isTainted(cf) || this->taintEngine->
isTainted(zf);
4324 this->controlFlow_s(inst);
4339 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4345 if (!op3->evaluate().is_zero()) {
4350 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4353 expr->isTainted |= this->taintEngine->
isTainted(zf);
4356 this->controlFlow_s(inst);
4375 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op3, op4), op5), this->astCtxt->bvfalse()), op2, op1);
4381 if ((op3->evaluate().is_zero() == op4->evaluate().is_zero()) && op5->evaluate().is_zero()) {
4386 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4392 this->controlFlow_s(inst);
4409 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, op4), op2, op1);
4415 if (op3->evaluate().is_zero() == op4->evaluate().is_zero()) {
4420 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4423 expr->isTainted |= this->taintEngine->
isTainted(sf) || this->taintEngine->
isTainted(of);
4426 this->controlFlow_s(inst);
4443 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvxor(op3, op4), this->astCtxt->bvtrue()), op2, op1);
4449 if (op3->evaluate().is_zero() != op4->evaluate().is_zero()) {
4454 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4457 expr->isTainted |= this->taintEngine->
isTainted(sf) || this->taintEngine->
isTainted(of);
4461 this->controlFlow_s(inst);
4480 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op3, op4), op5), this->astCtxt->bvtrue()), op2, op1);
4486 if ((op3->evaluate().is_zero() != op4->evaluate().is_zero()) || !op5->evaluate().is_zero()) {
4491 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4497 this->controlFlow_s(inst);
4512 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4518 if (op3->evaluate().is_zero()) {
4523 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4526 expr->isTainted |= this->taintEngine->
isTainted(zf);
4529 this->controlFlow_s(inst);
4544 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4550 if (op3->evaluate().is_zero()) {
4555 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4558 expr->isTainted |= this->taintEngine->
isTainted(of);
4561 this->controlFlow_s(inst);
4576 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4582 if (op3->evaluate().is_zero()) {
4587 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4590 expr->isTainted |= this->taintEngine->
isTainted(pf);
4593 this->controlFlow_s(inst);
4608 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvfalse()), op2, op1);
4614 if (op3->evaluate().is_zero()) {
4619 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4622 expr->isTainted |= this->taintEngine->
isTainted(sf);
4625 this->controlFlow_s(inst);
4640 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4646 if (!op3->evaluate().is_zero()) {
4651 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4654 expr->isTainted |= this->taintEngine->
isTainted(of);
4657 this->controlFlow_s(inst);
4672 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4678 if (!op3->evaluate().is_zero()) {
4683 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4686 expr->isTainted |= this->taintEngine->
isTainted(pf);
4689 this->controlFlow_s(inst);
4704 auto node = this->astCtxt->ite(this->astCtxt->equal(op3, this->astCtxt->bvtrue()), op2, op1);
4710 if (!op3->evaluate().is_zero()) {
4715 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
4718 expr->isTainted |= this->taintEngine->
isTainted(sf);
4721 this->controlFlow_s(inst);
4731 auto op2 = this->astCtxt->sx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
4734 auto node = this->astCtxt->bvsub(op1, op2);
4740 expr->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4743 this->af_s(inst, expr, dst, op1, op2,
true);
4744 this->cfSub_s(inst, expr, dst, op1, op2,
true);
4745 this->ofSub_s(inst, expr, dst, op1, op2,
true);
4746 this->pf_s(inst, expr, dst,
true);
4747 this->sf_s(inst, expr, dst,
true);
4748 this->zf_s(inst, expr, dst,
true);
4751 this->controlFlow_s(inst);
4769 this->controlFlow_s(inst);
4776 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4777 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4781 auto node1 = this->astCtxt->bvsub(op1, op2);
4782 auto node2 = this->astCtxt->ite(
4783 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4784 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::byte, index1.getBitSize())),
4785 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::byte, index1.getBitSize()))
4787 auto node3 = this->astCtxt->ite(
4788 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4789 this->astCtxt->bvadd(op4, this->astCtxt->bv(
triton::size::byte, index2.getBitSize())),
4790 this->astCtxt->bvsub(op4, this->astCtxt->bv(
triton::size::byte, index2.getBitSize()))
4799 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4800 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4801 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4804 this->af_s(inst, expr1, dst, op1, op2,
true);
4805 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4806 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4807 this->pf_s(inst, expr1, dst,
true);
4808 this->sf_s(inst, expr1, dst,
true);
4809 this->zf_s(inst, expr1, dst,
true);
4812 this->controlFlow_s(inst);
4830 this->controlFlow_s(inst);
4837 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4838 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4842 auto node1 = this->astCtxt->bvsub(op1, op2);
4843 auto node2 = this->astCtxt->ite(
4844 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4848 auto node3 = this->astCtxt->ite(
4849 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4860 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4861 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4862 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4865 this->af_s(inst, expr1, dst, op1, op2,
true);
4866 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4867 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4868 this->pf_s(inst, expr1, dst,
true);
4869 this->sf_s(inst, expr1, dst,
true);
4870 this->zf_s(inst, expr1, dst,
true);
4873 this->controlFlow_s(inst);
4891 this->controlFlow_s(inst);
4898 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4899 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4903 auto node1 = this->astCtxt->bvsub(op1, op2);
4904 auto node2 = this->astCtxt->ite(
4905 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4909 auto node3 = this->astCtxt->ite(
4910 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4921 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4922 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4923 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4926 this->af_s(inst, expr1, dst, op1, op2,
true);
4927 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4928 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4929 this->pf_s(inst, expr1, dst,
true);
4930 this->sf_s(inst, expr1, dst,
true);
4931 this->zf_s(inst, expr1, dst,
true);
4934 this->controlFlow_s(inst);
4952 this->controlFlow_s(inst);
4959 auto op3 = this->symbolicEngine->
getOperandAst(inst, index1);
4960 auto op4 = this->symbolicEngine->
getOperandAst(inst, index2);
4964 auto node1 = this->astCtxt->bvsub(op1, op2);
4965 auto node2 = this->astCtxt->ite(
4966 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4967 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::word, index1.getBitSize())),
4968 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::word, index1.getBitSize()))
4970 auto node3 = this->astCtxt->ite(
4971 this->astCtxt->equal(op5, this->astCtxt->bvfalse()),
4972 this->astCtxt->bvadd(op4, this->astCtxt->bv(
triton::size::word, index2.getBitSize())),
4973 this->astCtxt->bvsub(op4, this->astCtxt->bv(
triton::size::word, index2.getBitSize()))
4982 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
4983 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
4984 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
4987 this->af_s(inst, expr1, dst, op1, op2,
true);
4988 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
4989 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
4990 this->pf_s(inst, expr1, dst,
true);
4991 this->sf_s(inst, expr1, dst,
true);
4992 this->zf_s(inst, expr1, dst,
true);
4995 this->controlFlow_s(inst);
5007 switch (src1.getSize()) {
5009 accumulator.setRegister(arch::Register(this->architecture->
getRegister(ID_REG_X86_AX)));
5012 accumulator.setRegister(arch::Register(this->architecture->
getRegister(ID_REG_X86_EAX)));
5015 accumulator.setRegister(arch::Register(this->architecture->
getRegister(ID_REG_X86_RAX)));
5020 auto op1 = this->symbolicEngine->
getOperandAst(inst, accumulator);
5023 auto op1p = this->symbolicEngine->
getOperandAst(accumulatorp);
5028 auto nodeq = this->astCtxt->equal(op1, op2);
5029 auto node1 = this->astCtxt->bvsub(op1, op2);
5030 auto node2 = this->astCtxt->ite(nodeq, op3, op2);
5031 auto node3 = this->astCtxt->ite(nodeq, op1, op2);
5032 auto node2p = this->astCtxt->ite(nodeq, op3p, op2p);
5033 auto node3p = this->astCtxt->ite(nodeq, op1p, op2p);
5053 if (nodeq->evaluate() ==
true)
5059 expr1->isTainted = this->taintEngine->
isTainted(accumulator) | this->taintEngine->
isTainted(src1);
5060 expr2->isTainted = expr1->isTainted;
5061 expr3->isTainted = expr1->isTainted;
5062 expr4->isTainted = expr1->isTainted;
5063 expr5->isTainted = expr1->isTainted;
5065 expr7->isTainted = this->taintEngine->
taintAssignment(accumulator, src1);
5068 this->af_s(inst, expr1, accumulator, op1, op2,
true);
5069 this->cfSub_s(inst, expr1, accumulator, op1, op2,
true);
5070 this->ofSub_s(inst, expr1, accumulator, op1, op2,
true);
5071 this->pf_s(inst, expr1, accumulator,
true);
5072 this->sf_s(inst, expr1, accumulator,
true);
5073 this->zf_s(inst, expr1, accumulator,
true);
5076 this->controlFlow_s(inst);
5096 auto node1 = this->astCtxt->bvsub(this->astCtxt->concat(op2, op3), op1);
5098 auto node2 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::dqword)), this->astCtxt->concat(op4, op5), op1);
5100 auto node3 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::dqword)), this->astCtxt->concat(op2, op3), op1);
5105 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(127, 64, node3), src2,
"XCHG16B RDX operation");
5106 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(63, 0, node3), src3,
"XCHG16B RAX operation");
5110 expr2->isTainted = this->taintEngine->
setTaint(src1, this->taintEngine->
isTainted(src2) | this->taintEngine->isTainted(src3));
5115 this->zf_s(inst, expr1, src1,
true);
5118 this->controlFlow_s(inst);
5137 auto op2p = this->symbolicEngine->
getOperandAst(inst, src2p);
5138 auto op3p = this->symbolicEngine->
getOperandAst(inst, src3p);
5142 auto node1 = this->astCtxt->bvsub(this->astCtxt->concat(op2, op3), op1);
5144 auto node2 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::qword)), this->astCtxt->concat(op4, op5), op1);
5146 auto node3 = this->astCtxt->ite(this->astCtxt->equal(node1, this->astCtxt->bv(0,
triton::bitsize::qword)), this->astCtxt->concat(op2, op3), op1);
5147 auto node3p = this->astCtxt->ite(
5148 this->astCtxt->equal(
5151 this->astCtxt->concat(op2p, op3p),
5152 this->astCtxt->zx(src2p.getBitSize() + src3p.getBitSize() - src1.getBitSize(), op1)
5165 if (node1->evaluate() == 0)
5166 expr5 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract((src2p.getBitSize() * 2 - 1), src2p.getBitSize(), node3p), src2p,
"XCHG8B EDX operation");
5168 expr5 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(63, 32, node3), src2,
"XCHG8B EDX operation");
5171 if (node1->evaluate() == 0)
5172 expr6 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(src2p.getBitSize() - 1, 0, node3p), src3p,
"XCHG8B EAX operation");
5174 expr6 = this->symbolicEngine->
createSymbolicExpression(inst, this->astCtxt->extract(31, 0, node3), src3,
"XCHG8B EAX operation");
5178 expr2->isTainted = this->taintEngine->
setTaint(src1, this->taintEngine->
isTainted(src2) | this->taintEngine->isTainted(src3));
5185 this->zf_s(inst, expr1, src1,
true);
5188 this->controlFlow_s(inst);
5211 node1 = this->astCtxt->bv(0x0000000d, dst1.getBitSize());
5212 node2 = this->astCtxt->bv(0x756e6547, dst2.getBitSize());
5213 node3 = this->astCtxt->bv(0x6c65746e, dst3.getBitSize());
5214 node4 = this->astCtxt->bv(0x49656e69, dst4.getBitSize());
5217 node1 = this->astCtxt->bv(0x000306a9, dst1.getBitSize());
5218 node2 = this->astCtxt->bv(0x02100800, dst2.getBitSize());
5219 node3 = this->astCtxt->bv(0x7fbae3ff, dst3.getBitSize());
5220 node4 = this->astCtxt->bv(0xbfebfbff, dst4.getBitSize());
5223 node1 = this->astCtxt->bv(0x76035a01, dst1.getBitSize());
5224 node2 = this->astCtxt->bv(0x00f0b2ff, dst2.getBitSize());
5225 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5226 node4 = this->astCtxt->bv(0x00ca0000, dst4.getBitSize());
5229 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5230 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5231 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5232 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5235 node1 = this->astCtxt->bv(0x1c004121, dst1.getBitSize());
5236 node2 = this->astCtxt->bv(0x01c0003f, dst2.getBitSize());
5237 node3 = this->astCtxt->bv(0x0000003f, dst3.getBitSize());
5238 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5241 node1 = this->astCtxt->bv(0x00000040, dst1.getBitSize());
5242 node2 = this->astCtxt->bv(0x00000040, dst2.getBitSize());
5243 node3 = this->astCtxt->bv(0x00000003, dst3.getBitSize());
5244 node4 = this->astCtxt->bv(0x00021120, dst4.getBitSize());
5247 node1 = this->astCtxt->bv(0x80000008, dst1.getBitSize());
5248 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5249 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5250 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5253 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5254 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5255 node3 = this->astCtxt->bv(0x00000001, dst3.getBitSize());
5256 node4 = this->astCtxt->bv(0x28100800, dst4.getBitSize());
5259 node1 = this->astCtxt->bv(0x20202020, dst1.getBitSize());
5260 node2 = this->astCtxt->bv(0x49202020, dst2.getBitSize());
5261 node3 = this->astCtxt->bv(0x6c65746e, dst3.getBitSize());
5262 node4 = this->astCtxt->bv(0x20295228, dst4.getBitSize());
5265 node1 = this->astCtxt->bv(0x65726f43, dst1.getBitSize());
5266 node2 = this->astCtxt->bv(0x294d5428, dst2.getBitSize());
5267 node3 = this->astCtxt->bv(0x2d376920, dst3.getBitSize());
5268 node4 = this->astCtxt->bv(0x30323533, dst4.getBitSize());
5271 node1 = this->astCtxt->bv(0x5043204d, dst1.getBitSize());
5272 node2 = this->astCtxt->bv(0x20402055, dst2.getBitSize());
5273 node3 = this->astCtxt->bv(0x30392e32, dst3.getBitSize());
5274 node4 = this->astCtxt->bv(0x007a4847, dst4.getBitSize());
5277 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5278 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5279 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5280 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5283 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5284 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5285 node3 = this->astCtxt->bv(0x01006040, dst3.getBitSize());
5286 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5289 node1 = this->astCtxt->bv(0x00000000, dst1.getBitSize());
5290 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5291 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5292 node4 = this->astCtxt->bv(0x00000100, dst4.getBitSize());
5295 node1 = this->astCtxt->bv(0x00003024, dst1.getBitSize());
5296 node2 = this->astCtxt->bv(0x00000000, dst2.getBitSize());
5297 node3 = this->astCtxt->bv(0x00000000, dst3.getBitSize());
5298 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5301 node1 = this->astCtxt->bv(0x00000007, dst1.getBitSize());
5302 node2 = this->astCtxt->bv(0x00000340, dst2.getBitSize());
5303 node3 = this->astCtxt->bv(0x00000340, dst3.getBitSize());
5304 node4 = this->astCtxt->bv(0x00000000, dst4.getBitSize());
5321 this->controlFlow_s(inst);
5351 this->controlFlow_s(inst);
5381 this->controlFlow_s(inst);
5401 this->controlFlow_s(inst);
5410 auto op2 = this->astCtxt->bv(1, dst.
getBitSize());
5413 auto node = this->astCtxt->bvsub(op1, op2);
5419 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
5422 this->af_s(inst, expr, dst, op1, op2);
5423 this->ofSub_s(inst, expr, dst, op1, op2);
5424 this->pf_s(inst, expr, dst);
5425 this->sf_s(inst, expr, dst);
5426 this->zf_s(inst, expr, dst);
5429 this->controlFlow_s(inst);
5437 auto divisor = this->symbolicEngine->
getOperandAst(inst, src);
5445 auto dividend = this->symbolicEngine->
getOperandAst(inst, ax);
5452 auto node = this->astCtxt->concat(
5459 expr->isTainted = this->taintEngine->
taintUnion(ax, src);
5461 if (result->evaluate() > 0xff) {
5472 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, dx), this->symbolicEngine->getOperandAst(inst, ax));
5481 expr1->isTainted = this->taintEngine->
taintUnion(ax, src);
5485 expr2->isTainted = this->taintEngine->
taintUnion(dx, src);
5487 if (temp->evaluate() > 0xffff) {
5498 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, edx), this->symbolicEngine->getOperandAst(inst, eax));
5507 expr1->isTainted = this->taintEngine->
taintUnion(eax, src);
5511 expr2->isTainted = this->taintEngine->
taintUnion(edx, src);
5513 if (temp->evaluate() > 0xffffffff) {
5524 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, rdx), this->symbolicEngine->getOperandAst(inst, rax));
5533 expr1->isTainted = this->taintEngine->
taintUnion(rax, src);
5537 expr2->isTainted = this->taintEngine->
taintUnion(rdx, src);
5539 if (temp->evaluate() > 0xffffffffffffffff) {
5549 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
5550 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
5551 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
5552 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
5553 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
5554 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
5557 if (divisor->evaluate() == 0) {
5563 this->controlFlow_s(inst);
5569 this->controlFlow_s(inst);
5575 this->controlFlow_s(inst);
5590 this->astCtxt->bvlshr(
5592 this->astCtxt->bvmul(
5593 this->astCtxt->zx(126, this->astCtxt->extract(1, 0, op3)),
5616 this->controlFlow_s(inst);
5633 if (m512byte & 0xF) {
5697 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw_addr);
5698 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw_addr);
5699 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw_addr);
5700 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop_addr);
5702 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs_addr);
5704 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds_addr);
5705 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_addr);
5706 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask_addr);
5707 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0_addr);
5708 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1_addr);
5709 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2_addr);
5710 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3_addr);
5711 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4_addr);
5712 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5_addr);
5713 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6_addr);
5714 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7_addr);
5715 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0_addr);
5716 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1_addr);
5717 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2_addr);
5718 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3_addr);
5719 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4_addr);
5720 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5_addr);
5721 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6_addr);
5722 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7_addr);
5723 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
5724 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
5727 auto xmm0_orig = this->symbolicEngine->
getOperandAst(inst, xmm0);
5728 auto xmm1_orig = this->symbolicEngine->
getOperandAst(inst, xmm1);
5729 auto xmm2_orig = this->symbolicEngine->
getOperandAst(inst, xmm2);
5730 auto xmm3_orig = this->symbolicEngine->
getOperandAst(inst, xmm3);
5731 auto xmm4_orig = this->symbolicEngine->
getOperandAst(inst, xmm4);
5732 auto xmm5_orig = this->symbolicEngine->
getOperandAst(inst, xmm5);
5733 auto xmm6_orig = this->symbolicEngine->
getOperandAst(inst, xmm6);
5734 auto xmm7_orig = this->symbolicEngine->
getOperandAst(inst, xmm7);
5737 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
5738 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
5739 auto b64 = this->astCtxt->equal(this->astCtxt->bv(is64bits, 1), this->astCtxt->bv(1, 1));
5740 auto is_fast = this->astCtxt->land(this->astCtxt->land(cpl, ffx), b64);
5743 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
5744 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
5745 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
5746 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
5747 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
5748 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
5749 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
5750 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
5753 auto eb_1_0 = this->astCtxt->extract(0, 0, ftw_ast);
5754 auto eb_3_2 = this->astCtxt->extract(1, 1, ftw_ast);
5755 auto eb_5_4 = this->astCtxt->extract(2, 2, ftw_ast);
5756 auto eb_7_6 = this->astCtxt->extract(3, 3, ftw_ast);
5757 auto eb_9_8 = this->astCtxt->extract(4, 4, ftw_ast);
5758 auto eb_11_10 = this->astCtxt->extract(5, 5, ftw_ast);
5759 auto eb_13_12 = this->astCtxt->extract(6, 6, ftw_ast);
5760 auto eb_15_14 = this->astCtxt->extract(7, 7, ftw_ast);
5763 auto fraction_st0 = this->astCtxt->extract(62, 0, st0_ast);
5764 auto fraction_st1 = this->astCtxt->extract(62, 0, st1_ast);
5765 auto fraction_st2 = this->astCtxt->extract(62, 0, st2_ast);
5766 auto fraction_st3 = this->astCtxt->extract(62, 0, st3_ast);
5767 auto fraction_st4 = this->astCtxt->extract(62, 0, st4_ast);
5768 auto fraction_st5 = this->astCtxt->extract(62, 0, st5_ast);
5769 auto fraction_st6 = this->astCtxt->extract(62, 0, st6_ast);
5770 auto fraction_st7 = this->astCtxt->extract(62, 0, st7_ast);
5773 auto integer_st0 = this->astCtxt->extract(63, 63, st0_ast);
5774 auto integer_st1 = this->astCtxt->extract(63, 63, st1_ast);
5775 auto integer_st2 = this->astCtxt->extract(63, 63, st2_ast);
5776 auto integer_st3 = this->astCtxt->extract(63, 63, st3_ast);
5777 auto integer_st4 = this->astCtxt->extract(63, 63, st4_ast);
5778 auto integer_st5 = this->astCtxt->extract(63, 63, st5_ast);
5779 auto integer_st6 = this->astCtxt->extract(63, 63, st6_ast);
5780 auto integer_st7 = this->astCtxt->extract(63, 63, st7_ast);
5783 auto exponent_st0 = this->astCtxt->extract(79, 64, st0_ast);
5784 auto exponent_st1 = this->astCtxt->extract(79, 64, st1_ast);
5785 auto exponent_st2 = this->astCtxt->extract(79, 64, st2_ast);
5786 auto exponent_st3 = this->astCtxt->extract(79, 64, st3_ast);
5787 auto exponent_st4 = this->astCtxt->extract(79, 64, st4_ast);
5788 auto exponent_st5 = this->astCtxt->extract(79, 64, st5_ast);
5789 auto exponent_st6 = this->astCtxt->extract(79, 64, st6_ast);
5790 auto exponent_st7 = this->astCtxt->extract(79, 64, st7_ast);
5793 auto ea0_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0x0000, 16));
5794 auto ea0_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0x0000, 16));
5795 auto ea0_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0x0000, 16));
5796 auto ea0_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0x0000, 16));
5797 auto ea0_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0x0000, 16));
5798 auto ea0_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0x0000, 16));
5799 auto ea0_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0x0000, 16));
5800 auto ea0_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0x0000, 16));
5803 auto ea1_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0xFFFF, 16));
5804 auto ea1_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0xFFFF, 16));
5805 auto ea1_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0xFFFF, 16));
5806 auto ea1_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0xFFFF, 16));
5807 auto ea1_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0xFFFF, 16));
5808 auto ea1_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0xFFFF, 16));
5809 auto ea1_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0xFFFF, 16));
5810 auto ea1_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0xFFFF, 16));
5813 auto ena01_st0 = this->astCtxt->equal(this->astCtxt->lor(ea0_st0, ea1_st0), this->astCtxt->bvfalse());
5814 auto ena01_st1 = this->astCtxt->equal(this->astCtxt->lor(ea0_st1, ea1_st1), this->astCtxt->bvfalse());
5815 auto ena01_st2 = this->astCtxt->equal(this->astCtxt->lor(ea0_st2, ea1_st2), this->astCtxt->bvfalse());
5816 auto ena01_st3 = this->astCtxt->equal(this->astCtxt->lor(ea0_st3, ea1_st3), this->astCtxt->bvfalse());
5817 auto ena01_st4 = this->astCtxt->equal(this->astCtxt->lor(ea0_st4, ea1_st4), this->astCtxt->bvfalse());
5818 auto ena01_st5 = this->astCtxt->equal(this->astCtxt->lor(ea0_st5, ea1_st5), this->astCtxt->bvfalse());
5819 auto ena01_st6 = this->astCtxt->equal(this->astCtxt->lor(ea0_st6, ea1_st6), this->astCtxt->bvfalse());
5820 auto ena01_st7 = this->astCtxt->equal(this->astCtxt->lor(ea0_st7, ea1_st7), this->astCtxt->bvfalse());
5823 auto ib0_st0 = this->astCtxt->equal(integer_st0, this->astCtxt->bv(0, 1));
5824 auto ib0_st1 = this->astCtxt->equal(integer_st1, this->astCtxt->bv(0, 1));
5825 auto ib0_st2 = this->astCtxt->equal(integer_st2, this->astCtxt->bv(0, 1));
5826 auto ib0_st3 = this->astCtxt->equal(integer_st3, this->astCtxt->bv(0, 1));
5827 auto ib0_st4 = this->astCtxt->equal(integer_st4, this->astCtxt->bv(0, 1));
5828 auto ib0_st5 = this->astCtxt->equal(integer_st5, this->astCtxt->bv(0, 1));
5829 auto ib0_st6 = this->astCtxt->equal(integer_st6, this->astCtxt->bv(0, 1));
5830 auto ib0_st7 = this->astCtxt->equal(integer_st7, this->astCtxt->bv(0, 1));
5833 auto fa0_st0 = this->astCtxt->equal(fraction_st0, this->astCtxt->bv(0, 63));
5834 auto fa0_st1 = this->astCtxt->equal(fraction_st1, this->astCtxt->bv(0, 63));
5835 auto fa0_st2 = this->astCtxt->equal(fraction_st2, this->astCtxt->bv(0, 63));
5836 auto fa0_st3 = this->astCtxt->equal(fraction_st3, this->astCtxt->bv(0, 63));
5837 auto fa0_st4 = this->astCtxt->equal(fraction_st4, this->astCtxt->bv(0, 63));
5838 auto fa0_st5 = this->astCtxt->equal(fraction_st5, this->astCtxt->bv(0, 63));
5839 auto fa0_st6 = this->astCtxt->equal(fraction_st6, this->astCtxt->bv(0, 63));
5840 auto fa0_st7 = this->astCtxt->equal(fraction_st7, this->astCtxt->bv(0, 63));
5843 auto db_1_0 = this->astCtxt->ite(this->astCtxt->equal(eb_1_0, this->astCtxt->bv(0, 1)),
5844 this->astCtxt->bv(3, 2),
5845 this->astCtxt->ite(ea0_st0,
5846 this->astCtxt->ite(ib0_st0,
5847 this->astCtxt->ite(fa0_st0,
5848 this->astCtxt->bv(1, 2),
5849 this->astCtxt->bv(2, 2)),
5850 this->astCtxt->bv(2, 2)),
5851 this->astCtxt->ite(ena01_st0,
5852 this->astCtxt->ite(ib0_st0,
5853 this->astCtxt->bv(2, 2),
5854 this->astCtxt->bv(0, 2)),
5855 this->astCtxt->bv(2, 2))));
5857 auto db_3_2 = this->astCtxt->ite(this->astCtxt->equal(eb_3_2, this->astCtxt->bv(0, 1)),
5858 this->astCtxt->bv(3, 2),
5859 this->astCtxt->ite(ea0_st1,
5860 this->astCtxt->ite(ib0_st1,
5861 this->astCtxt->ite(fa0_st1,
5862 this->astCtxt->bv(1, 2),
5863 this->astCtxt->bv(2, 2)),
5864 this->astCtxt->bv(2, 2)),
5865 this->astCtxt->ite(ena01_st1,
5866 this->astCtxt->ite(ib0_st1,
5867 this->astCtxt->bv(2, 2),
5868 this->astCtxt->bv(0, 2)),
5869 this->astCtxt->bv(2, 2))));
5871 auto db_5_4 = this->astCtxt->ite(this->astCtxt->equal(eb_5_4, this->astCtxt->bv(0, 1)),
5872 this->astCtxt->bv(3, 2),
5873 this->astCtxt->ite(ea0_st2,
5874 this->astCtxt->ite(ib0_st2,
5875 this->astCtxt->ite(fa0_st2,
5876 this->astCtxt->bv(1, 2),
5877 this->astCtxt->bv(2, 2)),
5878 this->astCtxt->bv(2, 2)),
5879 this->astCtxt->ite(ena01_st2,
5880 this->astCtxt->ite(ib0_st2,
5881 this->astCtxt->bv(2, 2),
5882 this->astCtxt->bv(0, 2)),
5883 this->astCtxt->bv(2, 2))));
5885 auto db_7_6 = this->astCtxt->ite(this->astCtxt->equal(eb_7_6, this->astCtxt->bv(0, 1)),
5886 this->astCtxt->bv(3, 2),
5887 this->astCtxt->ite(ea0_st3,
5888 this->astCtxt->ite(ib0_st3,
5889 this->astCtxt->ite(fa0_st3,
5890 this->astCtxt->bv(1, 2),
5891 this->astCtxt->bv(2, 2)),
5892 this->astCtxt->bv(2, 2)),
5893 this->astCtxt->ite(ena01_st3,
5894 this->astCtxt->ite(ib0_st3,
5895 this->astCtxt->bv(2, 2),
5896 this->astCtxt->bv(0, 2)),
5897 this->astCtxt->bv(2, 2))));
5899 auto db_9_8 = this->astCtxt->ite(this->astCtxt->equal(eb_9_8, this->astCtxt->bv(0, 1)),
5900 this->astCtxt->bv(3, 2),
5901 this->astCtxt->ite(ea0_st4,
5902 this->astCtxt->ite(ib0_st4,
5903 this->astCtxt->ite(fa0_st4,
5904 this->astCtxt->bv(1, 2),
5905 this->astCtxt->bv(2, 2)),
5906 this->astCtxt->bv(2, 2)),
5907 this->astCtxt->ite(ena01_st4,
5908 this->astCtxt->ite(ib0_st4,
5909 this->astCtxt->bv(2, 2),
5910 this->astCtxt->bv(0, 2)),
5911 this->astCtxt->bv(2, 2))));
5913 auto db_11_10 = this->astCtxt->ite(this->astCtxt->equal(eb_11_10, this->astCtxt->bv(0, 1)),
5914 this->astCtxt->bv(3, 2),
5915 this->astCtxt->ite(ea0_st5,
5916 this->astCtxt->ite(ib0_st5,
5917 this->astCtxt->ite(fa0_st5,
5918 this->astCtxt->bv(1, 2),
5919 this->astCtxt->bv(2, 2)),
5920 this->astCtxt->bv(2, 2)),
5921 this->astCtxt->ite(ena01_st5,
5922 this->astCtxt->ite(ib0_st5,
5923 this->astCtxt->bv(2, 2),
5924 this->astCtxt->bv(0, 2)),
5925 this->astCtxt->bv(2, 2))));
5927 auto db_13_12 = this->astCtxt->ite(this->astCtxt->equal(eb_13_12, this->astCtxt->bv(0, 1)),
5928 this->astCtxt->bv(3, 2),
5929 this->astCtxt->ite(ea0_st6,
5930 this->astCtxt->ite(ib0_st6,
5931 this->astCtxt->ite(fa0_st6,
5932 this->astCtxt->bv(1, 2),
5933 this->astCtxt->bv(2, 2)),
5934 this->astCtxt->bv(2, 2)),
5935 this->astCtxt->ite(ena01_st6,
5936 this->astCtxt->ite(ib0_st6,
5937 this->astCtxt->bv(2, 2),
5938 this->astCtxt->bv(0, 2)),
5939 this->astCtxt->bv(2, 2))));
5941 auto db_15_14 = this->astCtxt->ite(this->astCtxt->equal(eb_15_14, this->astCtxt->bv(0, 1)),
5942 this->astCtxt->bv(3, 2),
5943 this->astCtxt->ite(ea0_st7,
5944 this->astCtxt->ite(ib0_st7,
5945 this->astCtxt->ite(fa0_st7,
5946 this->astCtxt->bv(1, 2),
5947 this->astCtxt->bv(2, 2)),
5948 this->astCtxt->bv(2, 2)),
5949 this->astCtxt->ite(ena01_st7,
5950 this->astCtxt->ite(ib0_st7,
5951 this->astCtxt->bv(2, 2),
5952 this->astCtxt->bv(0, 2)),
5953 this->astCtxt->bv(2, 2))));
5956 auto uftw_ast = this->astCtxt->concat(db_15_14,
5957 this->astCtxt->concat(db_13_12,
5958 this->astCtxt->concat(db_11_10,
5959 this->astCtxt->concat(db_9_8,
5960 this->astCtxt->concat(db_7_6,
5961 this->astCtxt->concat(db_5_4,
5962 this->astCtxt->concat(db_3_2, db_1_0)))))));
5967 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, uftw_ast, ftw,
"FXRSTOR Updated FTW operation");
5973 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr,
"FXRSTOR MXCSR operation");
5974 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask,
"FXRSTOR MXCSR_MASK operation");
5993 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw, fcw_addr);
5994 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw, fsw_addr);
5995 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw, ftw_addr);
5996 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop, fop_addr);
5997 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip, fip_addr);
5998 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs, fcs_addr);
5999 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp, fdp_addr);
6000 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds, fds_addr);
6001 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr, mxcsr_addr);
6002 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask, mxcsr_mask_addr);
6003 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0, st0_addr);
6004 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1, st1_addr);
6005 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2, st2_addr);
6006 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3, st3_addr);
6007 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4, st4_addr);
6008 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5, st5_addr);
6009 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6, st6_addr);
6010 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7, st7_addr);
6011 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0, xmm0_addr);
6012 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1, xmm1_addr);
6013 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2, xmm2_addr);
6014 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3, xmm3_addr);
6015 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4, xmm4_addr);
6016 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5, xmm5_addr);
6017 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6, xmm6_addr);
6018 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7, xmm7_addr);
6040 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8_addr);
6041 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9_addr);
6042 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10_addr);
6043 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11_addr);
6044 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12_addr);
6045 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13_addr);
6046 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14_addr);
6047 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15_addr);
6050 auto xmm8_orig = this->symbolicEngine->
getOperandAst(inst, xmm8);
6051 auto xmm9_orig = this->symbolicEngine->
getOperandAst(inst, xmm9);
6052 auto xmm10_orig = this->symbolicEngine->
getOperandAst(inst, xmm10);
6053 auto xmm11_orig = this->symbolicEngine->
getOperandAst(inst, xmm11);
6054 auto xmm12_orig = this->symbolicEngine->
getOperandAst(inst, xmm12);
6055 auto xmm13_orig = this->symbolicEngine->
getOperandAst(inst, xmm13);
6056 auto xmm14_orig = this->symbolicEngine->
getOperandAst(inst, xmm14);
6057 auto xmm15_orig = this->symbolicEngine->
getOperandAst(inst, xmm15);
6060 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
6061 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
6062 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
6063 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
6064 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
6065 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
6066 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
6067 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
6071 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10,
"FXRSTOR XMM10 operation");
6072 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11,
"FXRSTOR XMM11 operation");
6073 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12,
"FXRSTOR XMM12 operation");
6074 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13,
"FXRSTOR XMM13 operation");
6075 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14,
"FXRSTOR XMM14 operation");
6076 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15,
"FXRSTOR XMM15 operation");
6078 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8, xmm8_addr);
6079 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9, xmm9_addr);
6080 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10, xmm10_addr);
6081 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11, xmm11_addr);
6082 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12, xmm12_addr);
6083 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13, xmm13_addr);
6084 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14, xmm14_addr);
6085 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15, xmm15_addr);
6089 this->controlFlow_s(inst);
6100 if (m512byte & 0xF) {
6180 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw_addr);
6181 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw_addr);
6182 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw_addr);
6183 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop_addr);
6184 auto fip_ast = this->symbolicEngine->
getOperandAst(inst, fip_addr);
6185 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs_addr);
6186 auto fdp_ast = this->symbolicEngine->
getOperandAst(inst, fdp_addr);
6187 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds_addr);
6188 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_addr);
6189 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask_addr);
6190 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0_addr);
6191 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1_addr);
6192 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2_addr);
6193 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3_addr);
6194 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4_addr);
6195 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5_addr);
6196 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6_addr);
6197 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7_addr);
6198 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0_addr);
6199 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1_addr);
6200 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2_addr);
6201 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3_addr);
6202 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4_addr);
6203 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5_addr);
6204 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6_addr);
6205 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7_addr);
6206 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8_addr);
6207 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9_addr);
6208 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10_addr);
6209 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11_addr);
6210 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12_addr);
6211 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13_addr);
6212 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14_addr);
6213 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15_addr);
6214 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
6215 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
6218 auto xmm0_orig = this->symbolicEngine->
getOperandAst(inst, xmm0);
6219 auto xmm1_orig = this->symbolicEngine->
getOperandAst(inst, xmm1);
6220 auto xmm2_orig = this->symbolicEngine->
getOperandAst(inst, xmm2);
6221 auto xmm3_orig = this->symbolicEngine->
getOperandAst(inst, xmm3);
6222 auto xmm4_orig = this->symbolicEngine->
getOperandAst(inst, xmm4);
6223 auto xmm5_orig = this->symbolicEngine->
getOperandAst(inst, xmm5);
6224 auto xmm6_orig = this->symbolicEngine->
getOperandAst(inst, xmm6);
6225 auto xmm7_orig = this->symbolicEngine->
getOperandAst(inst, xmm7);
6226 auto xmm8_orig = this->symbolicEngine->
getOperandAst(inst, xmm8);
6227 auto xmm9_orig = this->symbolicEngine->
getOperandAst(inst, xmm9);
6228 auto xmm10_orig = this->symbolicEngine->
getOperandAst(inst, xmm10);
6229 auto xmm11_orig = this->symbolicEngine->
getOperandAst(inst, xmm11);
6230 auto xmm12_orig = this->symbolicEngine->
getOperandAst(inst, xmm12);
6231 auto xmm13_orig = this->symbolicEngine->
getOperandAst(inst, xmm13);
6232 auto xmm14_orig = this->symbolicEngine->
getOperandAst(inst, xmm14);
6233 auto xmm15_orig = this->symbolicEngine->
getOperandAst(inst, xmm15);
6236 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
6237 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
6238 auto is_fast = this->astCtxt->land(cpl, ffx);
6241 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
6242 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
6243 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
6244 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
6245 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
6246 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
6247 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
6248 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
6249 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
6250 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
6251 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
6252 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
6253 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
6254 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
6255 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
6256 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
6259 auto eb_1_0 = this->astCtxt->extract(0, 0, ftw_ast);
6260 auto eb_3_2 = this->astCtxt->extract(1, 1, ftw_ast);
6261 auto eb_5_4 = this->astCtxt->extract(2, 2, ftw_ast);
6262 auto eb_7_6 = this->astCtxt->extract(3, 3, ftw_ast);
6263 auto eb_9_8 = this->astCtxt->extract(4, 4, ftw_ast);
6264 auto eb_11_10 = this->astCtxt->extract(5, 5, ftw_ast);
6265 auto eb_13_12 = this->astCtxt->extract(6, 6, ftw_ast);
6266 auto eb_15_14 = this->astCtxt->extract(7, 7, ftw_ast);
6269 auto fraction_st0 = this->astCtxt->extract(62, 0, st0_ast);
6270 auto fraction_st1 = this->astCtxt->extract(62, 0, st1_ast);
6271 auto fraction_st2 = this->astCtxt->extract(62, 0, st2_ast);
6272 auto fraction_st3 = this->astCtxt->extract(62, 0, st3_ast);
6273 auto fraction_st4 = this->astCtxt->extract(62, 0, st4_ast);
6274 auto fraction_st5 = this->astCtxt->extract(62, 0, st5_ast);
6275 auto fraction_st6 = this->astCtxt->extract(62, 0, st6_ast);
6276 auto fraction_st7 = this->astCtxt->extract(62, 0, st7_ast);
6279 auto integer_st0 = this->astCtxt->extract(63, 63, st0_ast);
6280 auto integer_st1 = this->astCtxt->extract(63, 63, st1_ast);
6281 auto integer_st2 = this->astCtxt->extract(63, 63, st2_ast);
6282 auto integer_st3 = this->astCtxt->extract(63, 63, st3_ast);
6283 auto integer_st4 = this->astCtxt->extract(63, 63, st4_ast);
6284 auto integer_st5 = this->astCtxt->extract(63, 63, st5_ast);
6285 auto integer_st6 = this->astCtxt->extract(63, 63, st6_ast);
6286 auto integer_st7 = this->astCtxt->extract(63, 63, st7_ast);
6289 auto exponent_st0 = this->astCtxt->extract(79, 64, st0_ast);
6290 auto exponent_st1 = this->astCtxt->extract(79, 64, st1_ast);
6291 auto exponent_st2 = this->astCtxt->extract(79, 64, st2_ast);
6292 auto exponent_st3 = this->astCtxt->extract(79, 64, st3_ast);
6293 auto exponent_st4 = this->astCtxt->extract(79, 64, st4_ast);
6294 auto exponent_st5 = this->astCtxt->extract(79, 64, st5_ast);
6295 auto exponent_st6 = this->astCtxt->extract(79, 64, st6_ast);
6296 auto exponent_st7 = this->astCtxt->extract(79, 64, st7_ast);
6299 auto ea0_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0x0000, 16));
6300 auto ea0_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0x0000, 16));
6301 auto ea0_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0x0000, 16));
6302 auto ea0_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0x0000, 16));
6303 auto ea0_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0x0000, 16));
6304 auto ea0_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0x0000, 16));
6305 auto ea0_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0x0000, 16));
6306 auto ea0_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0x0000, 16));
6309 auto ea1_st0 = this->astCtxt->equal(exponent_st0, this->astCtxt->bv(0xFFFF, 16));
6310 auto ea1_st1 = this->astCtxt->equal(exponent_st1, this->astCtxt->bv(0xFFFF, 16));
6311 auto ea1_st2 = this->astCtxt->equal(exponent_st2, this->astCtxt->bv(0xFFFF, 16));
6312 auto ea1_st3 = this->astCtxt->equal(exponent_st3, this->astCtxt->bv(0xFFFF, 16));
6313 auto ea1_st4 = this->astCtxt->equal(exponent_st4, this->astCtxt->bv(0xFFFF, 16));
6314 auto ea1_st5 = this->astCtxt->equal(exponent_st5, this->astCtxt->bv(0xFFFF, 16));
6315 auto ea1_st6 = this->astCtxt->equal(exponent_st6, this->astCtxt->bv(0xFFFF, 16));
6316 auto ea1_st7 = this->astCtxt->equal(exponent_st7, this->astCtxt->bv(0xFFFF, 16));
6319 auto ena01_st0 = this->astCtxt->equal(this->astCtxt->lor(ea0_st0, ea1_st0), this->astCtxt->bvfalse());
6320 auto ena01_st1 = this->astCtxt->equal(this->astCtxt->lor(ea0_st1, ea1_st1), this->astCtxt->bvfalse());
6321 auto ena01_st2 = this->astCtxt->equal(this->astCtxt->lor(ea0_st2, ea1_st2), this->astCtxt->bvfalse());
6322 auto ena01_st3 = this->astCtxt->equal(this->astCtxt->lor(ea0_st3, ea1_st3), this->astCtxt->bvfalse());
6323 auto ena01_st4 = this->astCtxt->equal(this->astCtxt->lor(ea0_st4, ea1_st4), this->astCtxt->bvfalse());
6324 auto ena01_st5 = this->astCtxt->equal(this->astCtxt->lor(ea0_st5, ea1_st5), this->astCtxt->bvfalse());
6325 auto ena01_st6 = this->astCtxt->equal(this->astCtxt->lor(ea0_st6, ea1_st6), this->astCtxt->bvfalse());
6326 auto ena01_st7 = this->astCtxt->equal(this->astCtxt->lor(ea0_st7, ea1_st7), this->astCtxt->bvfalse());
6329 auto ib0_st0 = this->astCtxt->equal(integer_st0, this->astCtxt->bv(0, 1));
6330 auto ib0_st1 = this->astCtxt->equal(integer_st1, this->astCtxt->bv(0, 1));
6331 auto ib0_st2 = this->astCtxt->equal(integer_st2, this->astCtxt->bv(0, 1));
6332 auto ib0_st3 = this->astCtxt->equal(integer_st3, this->astCtxt->bv(0, 1));
6333 auto ib0_st4 = this->astCtxt->equal(integer_st4, this->astCtxt->bv(0, 1));
6334 auto ib0_st5 = this->astCtxt->equal(integer_st5, this->astCtxt->bv(0, 1));
6335 auto ib0_st6 = this->astCtxt->equal(integer_st6, this->astCtxt->bv(0, 1));
6336 auto ib0_st7 = this->astCtxt->equal(integer_st7, this->astCtxt->bv(0, 1));
6339 auto fa0_st0 = this->astCtxt->equal(fraction_st0, this->astCtxt->bv(0, 63));
6340 auto fa0_st1 = this->astCtxt->equal(fraction_st1, this->astCtxt->bv(0, 63));
6341 auto fa0_st2 = this->astCtxt->equal(fraction_st2, this->astCtxt->bv(0, 63));
6342 auto fa0_st3 = this->astCtxt->equal(fraction_st3, this->astCtxt->bv(0, 63));
6343 auto fa0_st4 = this->astCtxt->equal(fraction_st4, this->astCtxt->bv(0, 63));
6344 auto fa0_st5 = this->astCtxt->equal(fraction_st5, this->astCtxt->bv(0, 63));
6345 auto fa0_st6 = this->astCtxt->equal(fraction_st6, this->astCtxt->bv(0, 63));
6346 auto fa0_st7 = this->astCtxt->equal(fraction_st7, this->astCtxt->bv(0, 63));
6349 auto db_1_0 = this->astCtxt->ite(this->astCtxt->equal(eb_1_0, this->astCtxt->bv(0, 1)),
6350 this->astCtxt->bv(3, 2),
6351 this->astCtxt->ite(ea0_st0,
6352 this->astCtxt->ite(ib0_st0,
6353 this->astCtxt->ite(fa0_st0,
6354 this->astCtxt->bv(1, 2),
6355 this->astCtxt->bv(2, 2)),
6356 this->astCtxt->bv(2, 2)),
6357 this->astCtxt->ite(ena01_st0,
6358 this->astCtxt->ite(ib0_st0,
6359 this->astCtxt->bv(2, 2),
6360 this->astCtxt->bv(0, 2)),
6361 this->astCtxt->bv(2, 2))));
6363 auto db_3_2 = this->astCtxt->ite(this->astCtxt->equal(eb_3_2, this->astCtxt->bv(0, 1)),
6364 this->astCtxt->bv(3, 2),
6365 this->astCtxt->ite(ea0_st1,
6366 this->astCtxt->ite(ib0_st1,
6367 this->astCtxt->ite(fa0_st1,
6368 this->astCtxt->bv(1, 2),
6369 this->astCtxt->bv(2, 2)),
6370 this->astCtxt->bv(2, 2)),
6371 this->astCtxt->ite(ena01_st1,
6372 this->astCtxt->ite(ib0_st1,
6373 this->astCtxt->bv(2, 2),
6374 this->astCtxt->bv(0, 2)),
6375 this->astCtxt->bv(2, 2))));
6377 auto db_5_4 = this->astCtxt->ite(this->astCtxt->equal(eb_5_4, this->astCtxt->bv(0, 1)),
6378 this->astCtxt->bv(3, 2),
6379 this->astCtxt->ite(ea0_st2,
6380 this->astCtxt->ite(ib0_st2,
6381 this->astCtxt->ite(fa0_st2,
6382 this->astCtxt->bv(1, 2),
6383 this->astCtxt->bv(2, 2)),
6384 this->astCtxt->bv(2, 2)),
6385 this->astCtxt->ite(ena01_st2,
6386 this->astCtxt->ite(ib0_st2,
6387 this->astCtxt->bv(2, 2),
6388 this->astCtxt->bv(0, 2)),
6389 this->astCtxt->bv(2, 2))));
6391 auto db_7_6 = this->astCtxt->ite(this->astCtxt->equal(eb_7_6, this->astCtxt->bv(0, 1)),
6392 this->astCtxt->bv(3, 2),
6393 this->astCtxt->ite(ea0_st3,
6394 this->astCtxt->ite(ib0_st3,
6395 this->astCtxt->ite(fa0_st3,
6396 this->astCtxt->bv(1, 2),
6397 this->astCtxt->bv(2, 2)),
6398 this->astCtxt->bv(2, 2)),
6399 this->astCtxt->ite(ena01_st3,
6400 this->astCtxt->ite(ib0_st3,
6401 this->astCtxt->bv(2, 2),
6402 this->astCtxt->bv(0, 2)),
6403 this->astCtxt->bv(2, 2))));
6405 auto db_9_8 = this->astCtxt->ite(this->astCtxt->equal(eb_9_8, this->astCtxt->bv(0, 1)),
6406 this->astCtxt->bv(3, 2),
6407 this->astCtxt->ite(ea0_st4,
6408 this->astCtxt->ite(ib0_st4,
6409 this->astCtxt->ite(fa0_st4,
6410 this->astCtxt->bv(1, 2),
6411 this->astCtxt->bv(2, 2)),
6412 this->astCtxt->bv(2, 2)),
6413 this->astCtxt->ite(ena01_st4,
6414 this->astCtxt->ite(ib0_st4,
6415 this->astCtxt->bv(2, 2),
6416 this->astCtxt->bv(0, 2)),
6417 this->astCtxt->bv(2, 2))));
6419 auto db_11_10 = this->astCtxt->ite(this->astCtxt->equal(eb_11_10, this->astCtxt->bv(0, 1)),
6420 this->astCtxt->bv(3, 2),
6421 this->astCtxt->ite(ea0_st5,
6422 this->astCtxt->ite(ib0_st5,
6423 this->astCtxt->ite(fa0_st5,
6424 this->astCtxt->bv(1, 2),
6425 this->astCtxt->bv(2, 2)),
6426 this->astCtxt->bv(2, 2)),
6427 this->astCtxt->ite(ena01_st5,
6428 this->astCtxt->ite(ib0_st5,
6429 this->astCtxt->bv(2, 2),
6430 this->astCtxt->bv(0, 2)),
6431 this->astCtxt->bv(2, 2))));
6433 auto db_13_12 = this->astCtxt->ite(this->astCtxt->equal(eb_13_12, this->astCtxt->bv(0, 1)),
6434 this->astCtxt->bv(3, 2),
6435 this->astCtxt->ite(ea0_st6,
6436 this->astCtxt->ite(ib0_st6,
6437 this->astCtxt->ite(fa0_st6,
6438 this->astCtxt->bv(1, 2),
6439 this->astCtxt->bv(2, 2)),
6440 this->astCtxt->bv(2, 2)),
6441 this->astCtxt->ite(ena01_st6,
6442 this->astCtxt->ite(ib0_st6,
6443 this->astCtxt->bv(2, 2),
6444 this->astCtxt->bv(0, 2)),
6445 this->astCtxt->bv(2, 2))));
6447 auto db_15_14 = this->astCtxt->ite(this->astCtxt->equal(eb_15_14, this->astCtxt->bv(0, 1)),
6448 this->astCtxt->bv(3, 2),
6449 this->astCtxt->ite(ea0_st7,
6450 this->astCtxt->ite(ib0_st7,
6451 this->astCtxt->ite(fa0_st7,
6452 this->astCtxt->bv(1, 2),
6453 this->astCtxt->bv(2, 2)),
6454 this->astCtxt->bv(2, 2)),
6455 this->astCtxt->ite(ena01_st7,
6456 this->astCtxt->ite(ib0_st7,
6457 this->astCtxt->bv(2, 2),
6458 this->astCtxt->bv(0, 2)),
6459 this->astCtxt->bv(2, 2))));
6462 auto uftw_ast = this->astCtxt->concat(db_15_14,
6463 this->astCtxt->concat(db_13_12,
6464 this->astCtxt->concat(db_11_10,
6465 this->astCtxt->concat(db_9_8,
6466 this->astCtxt->concat(db_7_6,
6467 this->astCtxt->concat(db_5_4,
6468 this->astCtxt->concat(db_3_2, db_1_0)))))));
6473 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, uftw_ast, ftw,
"FXRSTOR64 Updated FTW operation");
6479 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr,
"FXRSTOR64 MXCSR operation");
6480 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask,
"FXRSTOR64 MXCSR_MASK operation");
6499 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10,
"FXRSTOR64 XMM10 operation");
6500 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11,
"FXRSTOR64 XMM11 operation");
6501 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12,
"FXRSTOR64 XMM12 operation");
6502 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13,
"FXRSTOR64 XMM13 operation");
6503 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14,
"FXRSTOR64 XMM14 operation");
6504 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15,
"FXRSTOR64 XMM15 operation");
6507 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw, fcw_addr);
6508 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw, fsw_addr);
6509 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw, ftw_addr);
6510 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop, fop_addr);
6511 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip, fip_addr);
6512 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs, fcs_addr);
6513 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp, fdp_addr);
6514 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds, fds_addr);
6515 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr, mxcsr_addr);
6516 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask, mxcsr_mask_addr);
6517 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0, st0_addr);
6518 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1, st1_addr);
6519 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2, st2_addr);
6520 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3, st3_addr);
6521 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4, st4_addr);
6522 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5, st5_addr);
6523 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6, st6_addr);
6524 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7, st7_addr);
6525 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0, xmm0_addr);
6526 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1, xmm1_addr);
6527 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2, xmm2_addr);
6528 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3, xmm3_addr);
6529 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4, xmm4_addr);
6530 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5, xmm5_addr);
6531 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6, xmm6_addr);
6532 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7, xmm7_addr);
6533 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8, xmm8_addr);
6534 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9, xmm9_addr);
6535 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10, xmm10_addr);
6536 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11, xmm11_addr);
6537 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12, xmm12_addr);
6538 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13, xmm13_addr);
6539 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14, xmm14_addr);
6540 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15, xmm15_addr);
6543 this->controlFlow_s(inst);
6560 if (m512byte & 0xF) {
6596 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw);
6597 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw);
6598 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw);
6599 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop);
6601 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs);
6603 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds);
6604 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr);
6605 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask);
6606 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0);
6607 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1);
6608 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2);
6609 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3);
6610 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4);
6611 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5);
6612 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6);
6613 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7);
6614 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0);
6615 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1);
6616 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2);
6617 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3);
6618 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4);
6619 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5);
6620 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6);
6621 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7);
6622 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
6623 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
6630 auto eb_1_0 = this->astCtxt->ite(
6631 this->astCtxt->equal(this->astCtxt->extract(1, 0, ftw_ast), this->astCtxt->bv(3, 2)),
6632 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6634 auto eb_3_2 = this->astCtxt->ite(
6635 this->astCtxt->equal(this->astCtxt->extract(3, 2, ftw_ast), this->astCtxt->bv(3, 2)),
6636 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6638 auto eb_5_4 = this->astCtxt->ite(
6639 this->astCtxt->equal(this->astCtxt->extract(5, 4, ftw_ast), this->astCtxt->bv(3, 2)),
6640 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6642 auto eb_7_6 = this->astCtxt->ite(
6643 this->astCtxt->equal(this->astCtxt->extract(7, 6, ftw_ast), this->astCtxt->bv(3, 2)),
6644 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6646 auto eb_9_8 = this->astCtxt->ite(
6647 this->astCtxt->equal(this->astCtxt->extract(9, 8, ftw_ast), this->astCtxt->bv(3, 2)),
6648 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6650 auto eb_11_10 = this->astCtxt->ite(
6651 this->astCtxt->equal(this->astCtxt->extract(11, 10, ftw_ast), this->astCtxt->bv(3, 2)),
6652 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6654 auto eb_13_12 = this->astCtxt->ite(
6655 this->astCtxt->equal(this->astCtxt->extract(13, 12, ftw_ast), this->astCtxt->bv(3, 2)),
6656 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6658 auto eb_15_14 = this->astCtxt->ite(
6659 this->astCtxt->equal(this->astCtxt->extract(15, 14, ftw_ast), this->astCtxt->bv(3, 2)),
6660 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6662 auto aftw_ast = this->astCtxt->concat(eb_15_14,
6663 this->astCtxt->concat(eb_13_12,
6664 this->astCtxt->concat(eb_11_10,
6665 this->astCtxt->concat(eb_9_8,
6666 this->astCtxt->concat(eb_7_6,
6667 this->astCtxt->concat(eb_5_4,
6668 this->astCtxt->concat(eb_3_2, eb_1_0)))))));
6699 auto xmm0_orig = this->symbolicEngine->
getOperandAst(xmm0_addr);
6700 auto xmm1_orig = this->symbolicEngine->
getOperandAst(xmm1_addr);
6701 auto xmm2_orig = this->symbolicEngine->
getOperandAst(xmm2_addr);
6702 auto xmm3_orig = this->symbolicEngine->
getOperandAst(xmm3_addr);
6703 auto xmm4_orig = this->symbolicEngine->
getOperandAst(xmm4_addr);
6704 auto xmm5_orig = this->symbolicEngine->
getOperandAst(xmm5_addr);
6705 auto xmm6_orig = this->symbolicEngine->
getOperandAst(xmm6_addr);
6706 auto xmm7_orig = this->symbolicEngine->
getOperandAst(xmm7_addr);
6709 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
6710 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
6711 auto b64 = this->astCtxt->equal(this->astCtxt->bv(is64bits, 1), this->astCtxt->bv(1, 1));
6712 auto is_fast = this->astCtxt->land(this->astCtxt->land(cpl, ffx), b64);
6715 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
6716 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
6717 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
6718 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
6719 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
6720 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
6721 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
6722 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
6727 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, aftw_ast, ftw_addr,
"FXSAVE Abridged FTW operation");
6733 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr_addr,
"FXSAVE MXCSR operation");
6734 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask_addr,
"FXSAVE MXCSR_MASK operation");
6743 auto xmm0_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm0_ast, xmm0_addr,
"FXSAVE XMM0 operation");
6744 auto xmm1_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm1_ast, xmm1_addr,
"FXSAVE XMM1 operation");
6745 auto xmm2_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm2_ast, xmm2_addr,
"FXSAVE XMM2 operation");
6746 auto xmm3_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm3_ast, xmm3_addr,
"FXSAVE XMM3 operation");
6747 auto xmm4_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm4_ast, xmm4_addr,
"FXSAVE XMM4 operation");
6748 auto xmm5_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm5_ast, xmm5_addr,
"FXSAVE XMM5 operation");
6749 auto xmm6_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm6_ast, xmm6_addr,
"FXSAVE XMM6 operation");
6750 auto xmm7_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm7_ast, xmm7_addr,
"FXSAVE XMM7 operation");
6753 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw_addr, fcw);
6754 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw_addr, fsw);
6755 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw_addr, ftw);
6756 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop_addr, fop);
6757 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip_addr, fip);
6758 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs_addr, fcs);
6759 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp_addr, fdp);
6760 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds_addr, fds);
6761 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_addr, mxcsr);
6762 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask_addr, mxcsr_mask);
6763 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0_addr, st0);
6764 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1_addr, st1);
6765 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2_addr, st2);
6766 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3_addr, st3);
6767 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4_addr, st4);
6768 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5_addr, st5);
6769 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6_addr, st6);
6770 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7_addr, st7);
6771 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0_addr, xmm0);
6772 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1_addr, xmm1);
6773 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2_addr, xmm2);
6774 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3_addr, xmm3);
6775 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4_addr, xmm4);
6776 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5_addr, xmm5);
6777 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6_addr, xmm6);
6778 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7_addr, xmm7);
6791 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8);
6792 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9);
6793 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10);
6794 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11);
6795 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12);
6796 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13);
6797 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14);
6798 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15);
6810 auto xmm8_orig = this->symbolicEngine->
getOperandAst(xmm8_addr);
6811 auto xmm9_orig = this->symbolicEngine->
getOperandAst(xmm9_addr);
6812 auto xmm10_orig = this->symbolicEngine->
getOperandAst(xmm10_addr);
6813 auto xmm11_orig = this->symbolicEngine->
getOperandAst(xmm11_addr);
6814 auto xmm12_orig = this->symbolicEngine->
getOperandAst(xmm12_addr);
6815 auto xmm13_orig = this->symbolicEngine->
getOperandAst(xmm13_addr);
6816 auto xmm14_orig = this->symbolicEngine->
getOperandAst(xmm14_addr);
6817 auto xmm15_orig = this->symbolicEngine->
getOperandAst(xmm15_addr);
6820 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
6821 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
6822 auto is_fast = this->astCtxt->land(cpl, ffx);
6825 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
6826 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
6827 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
6828 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
6829 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
6830 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
6831 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
6832 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
6834 auto xmm8_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm8_ast, xmm8_addr,
"FXSAVE XMM8 operation");
6835 auto xmm9_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm9_ast, xmm9_addr,
"FXSAVE XMM9 operation");
6836 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10_addr,
"FXSAVE XMM10 operation");
6837 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11_addr,
"FXSAVE XMM11 operation");
6838 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12_addr,
"FXSAVE XMM12 operation");
6839 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13_addr,
"FXSAVE XMM13 operation");
6840 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14_addr,
"FXSAVE XMM14 operation");
6841 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15_addr,
"FXSAVE XMM15 operation");
6843 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8_addr, xmm8);
6844 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9_addr, xmm9);
6845 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10_addr, xmm10);
6846 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11_addr, xmm11);
6847 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12_addr, xmm12);
6848 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13_addr, xmm13);
6849 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14_addr, xmm14);
6850 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15_addr, xmm15);
6854 this->controlFlow_s(inst);
6865 if (m512byte & 0xF) {
6909 auto fcw_ast = this->symbolicEngine->
getOperandAst(inst, fcw);
6910 auto fsw_ast = this->symbolicEngine->
getOperandAst(inst, fsw);
6911 auto ftw_ast = this->symbolicEngine->
getOperandAst(inst, ftw);
6912 auto fop_ast = this->symbolicEngine->
getOperandAst(inst, fop);
6913 auto fip_ast = this->symbolicEngine->
getOperandAst(inst, fip);
6914 auto fcs_ast = this->symbolicEngine->
getOperandAst(inst, fcs);
6915 auto fdp_ast = this->symbolicEngine->
getOperandAst(inst, fdp);
6916 auto fds_ast = this->symbolicEngine->
getOperandAst(inst, fds);
6917 auto mxcsr_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr);
6918 auto mxcsr_mask_ast = this->symbolicEngine->
getOperandAst(inst, mxcsr_mask);
6919 auto st0_ast = this->symbolicEngine->
getOperandAst(inst, st0);
6920 auto st1_ast = this->symbolicEngine->
getOperandAst(inst, st1);
6921 auto st2_ast = this->symbolicEngine->
getOperandAst(inst, st2);
6922 auto st3_ast = this->symbolicEngine->
getOperandAst(inst, st3);
6923 auto st4_ast = this->symbolicEngine->
getOperandAst(inst, st4);
6924 auto st5_ast = this->symbolicEngine->
getOperandAst(inst, st5);
6925 auto st6_ast = this->symbolicEngine->
getOperandAst(inst, st6);
6926 auto st7_ast = this->symbolicEngine->
getOperandAst(inst, st7);
6927 auto xmm0_ast = this->symbolicEngine->
getOperandAst(inst, xmm0);
6928 auto xmm1_ast = this->symbolicEngine->
getOperandAst(inst, xmm1);
6929 auto xmm2_ast = this->symbolicEngine->
getOperandAst(inst, xmm2);
6930 auto xmm3_ast = this->symbolicEngine->
getOperandAst(inst, xmm3);
6931 auto xmm4_ast = this->symbolicEngine->
getOperandAst(inst, xmm4);
6932 auto xmm5_ast = this->symbolicEngine->
getOperandAst(inst, xmm5);
6933 auto xmm6_ast = this->symbolicEngine->
getOperandAst(inst, xmm6);
6934 auto xmm7_ast = this->symbolicEngine->
getOperandAst(inst, xmm7);
6935 auto xmm8_ast = this->symbolicEngine->
getOperandAst(inst, xmm8);
6936 auto xmm9_ast = this->symbolicEngine->
getOperandAst(inst, xmm9);
6937 auto xmm10_ast = this->symbolicEngine->
getOperandAst(inst, xmm10);
6938 auto xmm11_ast = this->symbolicEngine->
getOperandAst(inst, xmm11);
6939 auto xmm12_ast = this->symbolicEngine->
getOperandAst(inst, xmm12);
6940 auto xmm13_ast = this->symbolicEngine->
getOperandAst(inst, xmm13);
6941 auto xmm14_ast = this->symbolicEngine->
getOperandAst(inst, xmm14);
6942 auto xmm15_ast = this->symbolicEngine->
getOperandAst(inst, xmm15);
6943 auto ffxsr_ast = this->symbolicEngine->
getOperandAst(inst, ffxsr);
6944 auto cs_ast = this->symbolicEngine->
getOperandAst(inst, cs);
6951 auto eb_1_0 = this->astCtxt->ite(
6952 this->astCtxt->equal(this->astCtxt->extract(1, 0, ftw_ast), this->astCtxt->bv(3, 2)),
6953 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6955 auto eb_3_2 = this->astCtxt->ite(
6956 this->astCtxt->equal(this->astCtxt->extract(3, 2, ftw_ast), this->astCtxt->bv(3, 2)),
6957 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6959 auto eb_5_4 = this->astCtxt->ite(
6960 this->astCtxt->equal(this->astCtxt->extract(5, 4, ftw_ast), this->astCtxt->bv(3, 2)),
6961 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6963 auto eb_7_6 = this->astCtxt->ite(
6964 this->astCtxt->equal(this->astCtxt->extract(7, 6, ftw_ast), this->astCtxt->bv(3, 2)),
6965 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6967 auto eb_9_8 = this->astCtxt->ite(
6968 this->astCtxt->equal(this->astCtxt->extract(9, 8, ftw_ast), this->astCtxt->bv(3, 2)),
6969 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6971 auto eb_11_10 = this->astCtxt->ite(
6972 this->astCtxt->equal(this->astCtxt->extract(11, 10, ftw_ast), this->astCtxt->bv(3, 2)),
6973 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6975 auto eb_13_12 = this->astCtxt->ite(
6976 this->astCtxt->equal(this->astCtxt->extract(13, 12, ftw_ast), this->astCtxt->bv(3, 2)),
6977 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6979 auto eb_15_14 = this->astCtxt->ite(
6980 this->astCtxt->equal(this->astCtxt->extract(15, 14, ftw_ast), this->astCtxt->bv(3, 2)),
6981 this->astCtxt->bv(0, 1), this->astCtxt->bv(1, 1));
6983 auto aftw_ast = this->astCtxt->concat(eb_15_14,
6984 this->astCtxt->concat(eb_13_12,
6985 this->astCtxt->concat(eb_11_10,
6986 this->astCtxt->concat(eb_9_8,
6987 this->astCtxt->concat(eb_7_6,
6988 this->astCtxt->concat(eb_5_4,
6989 this->astCtxt->concat(eb_3_2, eb_1_0)))))));
7028 auto xmm0_orig = this->symbolicEngine->
getOperandAst(xmm0_addr);
7029 auto xmm1_orig = this->symbolicEngine->
getOperandAst(xmm1_addr);
7030 auto xmm2_orig = this->symbolicEngine->
getOperandAst(xmm2_addr);
7031 auto xmm3_orig = this->symbolicEngine->
getOperandAst(xmm3_addr);
7032 auto xmm4_orig = this->symbolicEngine->
getOperandAst(xmm4_addr);
7033 auto xmm5_orig = this->symbolicEngine->
getOperandAst(xmm5_addr);
7034 auto xmm6_orig = this->symbolicEngine->
getOperandAst(xmm6_addr);
7035 auto xmm7_orig = this->symbolicEngine->
getOperandAst(xmm7_addr);
7036 auto xmm8_orig = this->symbolicEngine->
getOperandAst(xmm8_addr);
7037 auto xmm9_orig = this->symbolicEngine->
getOperandAst(xmm9_addr);
7038 auto xmm10_orig = this->symbolicEngine->
getOperandAst(xmm10_addr);
7039 auto xmm11_orig = this->symbolicEngine->
getOperandAst(xmm11_addr);
7040 auto xmm12_orig = this->symbolicEngine->
getOperandAst(xmm12_addr);
7041 auto xmm13_orig = this->symbolicEngine->
getOperandAst(xmm13_addr);
7042 auto xmm14_orig = this->symbolicEngine->
getOperandAst(xmm14_addr);
7043 auto xmm15_orig = this->symbolicEngine->
getOperandAst(xmm15_addr);
7046 auto cpl = this->astCtxt->equal(this->astCtxt->extract(1, 0, cs_ast), this->astCtxt->bv(0, 2));
7047 auto ffx = this->astCtxt->equal(ffxsr_ast, this->astCtxt->bv(1, 1));
7048 auto is_fast = this->astCtxt->land(cpl, ffx);
7051 xmm0_ast = this->astCtxt->ite(is_fast, xmm0_orig, xmm0_ast);
7052 xmm1_ast = this->astCtxt->ite(is_fast, xmm1_orig, xmm1_ast);
7053 xmm2_ast = this->astCtxt->ite(is_fast, xmm2_orig, xmm2_ast);
7054 xmm3_ast = this->astCtxt->ite(is_fast, xmm3_orig, xmm3_ast);
7055 xmm4_ast = this->astCtxt->ite(is_fast, xmm4_orig, xmm4_ast);
7056 xmm5_ast = this->astCtxt->ite(is_fast, xmm5_orig, xmm5_ast);
7057 xmm6_ast = this->astCtxt->ite(is_fast, xmm6_orig, xmm6_ast);
7058 xmm7_ast = this->astCtxt->ite(is_fast, xmm7_orig, xmm7_ast);
7059 xmm8_ast = this->astCtxt->ite(is_fast, xmm8_orig, xmm8_ast);
7060 xmm9_ast = this->astCtxt->ite(is_fast, xmm9_orig, xmm9_ast);
7061 xmm10_ast = this->astCtxt->ite(is_fast, xmm10_orig, xmm10_ast);
7062 xmm11_ast = this->astCtxt->ite(is_fast, xmm11_orig, xmm11_ast);
7063 xmm12_ast = this->astCtxt->ite(is_fast, xmm12_orig, xmm12_ast);
7064 xmm13_ast = this->astCtxt->ite(is_fast, xmm13_orig, xmm13_ast);
7065 xmm14_ast = this->astCtxt->ite(is_fast, xmm14_orig, xmm14_ast);
7066 xmm15_ast = this->astCtxt->ite(is_fast, xmm15_orig, xmm15_ast);
7071 auto ftw_expr = this->symbolicEngine->
createSymbolicExpression(inst, aftw_ast, ftw_addr,
"FXSAVE64 Abridged FTW operation");
7077 auto mxcsr_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_ast, mxcsr_addr,
"FXSAVE64 MXCSR operation");
7078 auto mxcsr_mask_expr = this->symbolicEngine->
createSymbolicExpression(inst, mxcsr_mask_ast, mxcsr_mask_addr,
"FXSAVE64 MXCSR_MASK operation");
7087 auto xmm0_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm0_ast, xmm0_addr,
"FXSAVE64 XMM0 operation");
7088 auto xmm1_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm1_ast, xmm1_addr,
"FXSAVE64 XMM1 operation");
7089 auto xmm2_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm2_ast, xmm2_addr,
"FXSAVE64 XMM2 operation");
7090 auto xmm3_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm3_ast, xmm3_addr,
"FXSAVE64 XMM3 operation");
7091 auto xmm4_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm4_ast, xmm4_addr,
"FXSAVE64 XMM4 operation");
7092 auto xmm5_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm5_ast, xmm5_addr,
"FXSAVE64 XMM5 operation");
7093 auto xmm6_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm6_ast, xmm6_addr,
"FXSAVE64 XMM6 operation");
7094 auto xmm7_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm7_ast, xmm7_addr,
"FXSAVE64 XMM7 operation");
7095 auto xmm8_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm8_ast, xmm8_addr,
"FXSAVE64 XMM8 operation");
7096 auto xmm9_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm9_ast, xmm9_addr,
"FXSAVE64 XMM9 operation");
7097 auto xmm10_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm10_ast, xmm10_addr,
"FXSAVE64 XMM10 operation");
7098 auto xmm11_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm11_ast, xmm11_addr,
"FXSAVE64 XMM11 operation");
7099 auto xmm12_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm12_ast, xmm12_addr,
"FXSAVE64 XMM12 operation");
7100 auto xmm13_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm13_ast, xmm13_addr,
"FXSAVE64 XMM13 operation");
7101 auto xmm14_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm14_ast, xmm14_addr,
"FXSAVE64 XMM14 operation");
7102 auto xmm15_expr = this->symbolicEngine->
createSymbolicExpression(inst, xmm15_ast, xmm15_addr,
"FXSAVE64 XMM15 operation");
7105 fcw_expr->isTainted = this->taintEngine->
taintAssignment(fcw_addr, fcw);
7106 fsw_expr->isTainted = this->taintEngine->
taintAssignment(fsw_addr, fsw);
7107 ftw_expr->isTainted = this->taintEngine->
taintAssignment(ftw_addr, ftw);
7108 fop_expr->isTainted = this->taintEngine->
taintAssignment(fop_addr, fop);
7109 fip_expr->isTainted = this->taintEngine->
taintAssignment(fip_addr, fip);
7110 fcs_expr->isTainted = this->taintEngine->
taintAssignment(fcs_addr, fcs);
7111 fdp_expr->isTainted = this->taintEngine->
taintAssignment(fdp_addr, fdp);
7112 fds_expr->isTainted = this->taintEngine->
taintAssignment(fds_addr, fds);
7113 mxcsr_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_addr, mxcsr);
7114 mxcsr_mask_expr->isTainted = this->taintEngine->
taintAssignment(mxcsr_mask_addr, mxcsr_mask);
7115 st0_expr->isTainted = this->taintEngine->
taintAssignment(st0_addr, st0);
7116 st1_expr->isTainted = this->taintEngine->
taintAssignment(st1_addr, st1);
7117 st2_expr->isTainted = this->taintEngine->
taintAssignment(st2_addr, st2);
7118 st3_expr->isTainted = this->taintEngine->
taintAssignment(st3_addr, st3);
7119 st4_expr->isTainted = this->taintEngine->
taintAssignment(st4_addr, st4);
7120 st5_expr->isTainted = this->taintEngine->
taintAssignment(st5_addr, st5);
7121 st6_expr->isTainted = this->taintEngine->
taintAssignment(st6_addr, st6);
7122 st7_expr->isTainted = this->taintEngine->
taintAssignment(st7_addr, st7);
7123 xmm0_expr->isTainted = this->taintEngine->
taintAssignment(xmm0_addr, xmm0);
7124 xmm1_expr->isTainted = this->taintEngine->
taintAssignment(xmm1_addr, xmm1);
7125 xmm2_expr->isTainted = this->taintEngine->
taintAssignment(xmm2_addr, xmm2);
7126 xmm3_expr->isTainted = this->taintEngine->
taintAssignment(xmm3_addr, xmm3);
7127 xmm4_expr->isTainted = this->taintEngine->
taintAssignment(xmm4_addr, xmm4);
7128 xmm5_expr->isTainted = this->taintEngine->
taintAssignment(xmm5_addr, xmm5);
7129 xmm6_expr->isTainted = this->taintEngine->
taintAssignment(xmm6_addr, xmm6);
7130 xmm7_expr->isTainted = this->taintEngine->
taintAssignment(xmm7_addr, xmm7);
7131 xmm8_expr->isTainted = this->taintEngine->
taintAssignment(xmm8_addr, xmm8);
7132 xmm9_expr->isTainted = this->taintEngine->
taintAssignment(xmm9_addr, xmm9);
7133 xmm10_expr->isTainted = this->taintEngine->
taintAssignment(xmm10_addr, xmm10);
7134 xmm11_expr->isTainted = this->taintEngine->
taintAssignment(xmm11_addr, xmm11);
7135 xmm12_expr->isTainted = this->taintEngine->
taintAssignment(xmm12_addr, xmm12);
7136 xmm13_expr->isTainted = this->taintEngine->
taintAssignment(xmm13_addr, xmm13);
7137 xmm14_expr->isTainted = this->taintEngine->
taintAssignment(xmm14_addr, xmm14);
7138 xmm15_expr->isTainted = this->taintEngine->
taintAssignment(xmm15_addr, xmm15);
7141 this->controlFlow_s(inst);
7149 auto divisor = this->symbolicEngine->
getOperandAst(inst, src);
7157 auto dividend = this->symbolicEngine->
getOperandAst(inst, ax);
7164 auto node = this->astCtxt->concat(
7171 expr->isTainted = this->taintEngine->
taintUnion(ax, src);
7179 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, dx), this->symbolicEngine->getOperandAst(inst, ax));
7188 expr1->isTainted = this->taintEngine->
taintUnion(ax, src);
7192 expr2->isTainted = this->taintEngine->
taintUnion(dx, src);
7200 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, edx), this->symbolicEngine->getOperandAst(inst, eax));
7209 expr1->isTainted = this->taintEngine->
taintUnion(eax, src);
7213 expr2->isTainted = this->taintEngine->
taintUnion(edx, src);
7221 auto dividend = this->astCtxt->concat(this->symbolicEngine->
getOperandAst(inst, rdx), this->symbolicEngine->getOperandAst(inst, rax));
7230 expr1->isTainted = this->taintEngine->
taintUnion(rax, src);
7234 expr2->isTainted = this->taintEngine->
taintUnion(rdx, src);
7241 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
7242 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
7243 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
7244 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
7245 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
7246 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
7249 if (divisor->evaluate() == 0) {
7255 this->controlFlow_s(inst);
7277 expr->isTainted = this->taintEngine->
taintUnion(ax, src);
7278 this->cfImul_s(inst, expr, al, this->astCtxt->bvmul(op1, op2), node);
7279 this->ofImul_s(inst, expr, al, this->astCtxt->bvmul(op1, op2), node);
7289 auto node1 = this->astCtxt->bvmul(op1, op2);
7293 expr1->isTainted = this->taintEngine->
taintUnion(ax, src);
7294 expr2->isTainted = this->taintEngine->
taintUnion(dx, ax);
7295 this->cfImul_s(inst, expr1, ax, node1, node2);
7296 this->ofImul_s(inst, expr1, ax, node1, node2);
7306 auto node1 = this->astCtxt->bvmul(op1, op2);
7310 expr1->isTainted = this->taintEngine->
taintUnion(eax, src);
7311 expr2->isTainted = this->taintEngine->
taintUnion(edx, eax);
7312 this->cfImul_s(inst, expr1, eax, node1, node2);
7313 this->ofImul_s(inst, expr1, eax, node1, node2);
7323 auto node1 = this->astCtxt->bvmul(op1, op2);
7327 expr1->isTainted = this->taintEngine->
taintUnion(rax, src);
7328 expr2->isTainted = this->taintEngine->
taintUnion(rdx, rax);
7329 this->cfImul_s(inst, expr1, rax, node1, node2);
7330 this->ofImul_s(inst, expr1, rax, node1, node2);
7344 auto node1 = this->astCtxt->bvmul(op1, op2);
7345 auto node2 = this->astCtxt->bvmul(this->astCtxt->sx(dst.
getBitSize(), op1), this->astCtxt->sx(src.
getBitSize(), op2));
7347 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
7348 this->cfImul_s(inst, expr, dst, node1, node2);
7349 this->ofImul_s(inst, expr, dst, node1, node2);
7359 auto op3 = this->astCtxt->sx(src1.getBitSize() - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
7360 auto node1 = this->astCtxt->bvmul(op2, op3);
7361 auto node2 = this->astCtxt->bvmul(this->astCtxt->sx(src1.getBitSize(), op2), this->astCtxt->sx(src2.getBitSize(), op3));
7363 expr->isTainted = this->taintEngine->
setTaint(dst, this->taintEngine->
isTainted(src1) | this->taintEngine->isTainted(src2));
7364 this->cfImul_s(inst, expr, dst, node1, node2);
7365 this->ofImul_s(inst, expr, dst, node1, node2);
7372 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
7373 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
7374 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
7375 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
7378 this->controlFlow_s(inst);
7387 auto op2 = this->astCtxt->bv(1, dst.
getBitSize());
7390 auto node = this->astCtxt->bvadd(op1, op2);
7396 expr->isTainted = this->taintEngine->
taintUnion(dst, dst);
7399 this->af_s(inst, expr, dst, op1, op2);
7400 this->ofAdd_s(inst, expr, dst, op1, op2);
7401 this->pf_s(inst, expr, dst);
7402 this->sf_s(inst, expr, dst);
7403 this->zf_s(inst, expr, dst);
7406 this->controlFlow_s(inst);
7412 this->controlFlow_s(inst);
7418 this->controlFlow_s(inst);
7432 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7433 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7436 auto node = this->astCtxt->ite(
7437 this->astCtxt->equal(
7438 this->astCtxt->bvand(
7439 this->astCtxt->bvnot(op1),
7440 this->astCtxt->bvnot(op2)
7442 this->astCtxt->bvtrue()
7449 if (op1->evaluate().is_zero() && op2->evaluate().is_zero())
7454 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7469 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7470 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7473 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7479 if (op1->evaluate().is_zero())
7498 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7499 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7502 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7508 if (!op1->evaluate().is_zero())
7529 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7530 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7533 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(op1, op2), this->astCtxt->bvtrue()), op4, op3);
7539 if (!op1->evaluate().is_zero() || !op2->evaluate().is_zero())
7544 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7559 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7560 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7562 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bv(0,
triton::bitsize::word)), op3, op2);
7568 if (!op1->evaluate().is_zero())
7587 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7588 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7591 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7597 if (!op1->evaluate().is_zero())
7616 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7617 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7619 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bv(0,
triton::bitsize::dword)), op3, op2);
7625 if (!op1->evaluate().is_zero())
7648 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7649 auto op5 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7652 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op1, op2), op3), this->astCtxt->bvfalse()), op5, op4);
7658 if ((op1->evaluate().is_zero() == op2->evaluate().is_zero()) && op3->evaluate().is_zero())
7663 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7664 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7681 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7682 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7685 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, op2), op4, op3);
7691 if (op1->evaluate().is_zero() == op2->evaluate().is_zero())
7696 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7713 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7714 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7717 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvxor(op1, op2), this->astCtxt->bvtrue()), op4, op3);
7723 if (op1->evaluate().is_zero() != op2->evaluate().is_zero())
7728 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7747 auto op4 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7748 auto op5 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7751 auto node = this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op1, op2), op3), this->astCtxt->bvtrue()), op5, op4);
7757 if ((op1->evaluate().is_zero() != op2->evaluate().is_zero()) || !op3->evaluate().is_zero())
7762 expr->isTainted = this->taintEngine->
taintUnion(pc, of);
7763 expr->isTainted = this->taintEngine->
taintUnion(pc, zf);
7802 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7803 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7806 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7812 if (op1->evaluate().is_zero())
7831 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7832 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7835 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7841 if (op1->evaluate().is_zero())
7860 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7861 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7864 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7870 if (op1->evaluate().is_zero())
7889 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7890 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7893 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvfalse()), op3, op2);
7899 if (op1->evaluate().is_zero())
7918 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7919 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7922 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7928 if (!op1->evaluate().is_zero())
7947 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7948 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7951 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
7957 if (!op1->evaluate().is_zero())
7976 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
7977 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
7979 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bv(0,
triton::bitsize::qword)), op3, op2);
7985 if (!op1->evaluate().is_zero())
8004 auto op2 = this->symbolicEngine->
getOperandAst(inst, srcImm1);
8005 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcImm2);
8008 auto node = this->astCtxt->ite(this->astCtxt->equal(op1, this->astCtxt->bvtrue()), op3, op2);
8014 if (!op1->evaluate().is_zero())
8041 std::vector<triton::ast::SharedAbstractNode> flags;
8044 flags.push_back(op1);
8045 flags.push_back(op2);
8046 flags.push_back(this->astCtxt->bvfalse());
8047 flags.push_back(op3);
8048 flags.push_back(this->astCtxt->bvfalse());
8049 flags.push_back(op4);
8050 flags.push_back(this->astCtxt->bvtrue());
8051 flags.push_back(op5);
8053 auto node = this->astCtxt->concat(flags);
8063 expr->isTainted = this->taintEngine->
taintUnion(dst, src5);
8066 this->controlFlow_s(inst);
8084 this->controlFlow_s(inst);
8102 this->controlFlow_s(inst);
8107 auto& dst = inst.
operands[0].getRegister();
8108 auto& srcDisp = inst.
operands[1].getMemory().getDisplacement();
8109 auto& srcBase = inst.
operands[1].getMemory().getBaseRegister();
8110 auto& srcIndex = inst.
operands[1].getMemory().getIndexRegister();
8111 auto& srcScale = inst.
operands[1].getMemory().getScale();
8116 leaSize = srcBase.getBitSize();
8118 leaSize = srcIndex.getBitSize();
8120 leaSize = srcDisp.getBitSize();
8126 if (leaSize > srcDisp.getBitSize())
8127 op2 = this->astCtxt->zx(leaSize - srcDisp.getBitSize(), op2);
8134 op3 = this->astCtxt->bv(0, leaSize);
8137 if (this->architecture->
isRegisterValid(srcBase) && (this->architecture->getParentRegister(srcBase) == this->architecture->getProgramCounter()))
8138 op3 = this->astCtxt->bvadd(op3, this->astCtxt->bv(inst.
getSize(), leaSize));
8145 op4 = this->astCtxt->bv(0, leaSize);
8149 if (leaSize > srcScale.getBitSize())
8150 op5 = this->astCtxt->zx(leaSize - srcScale.getBitSize(), op5);
8154 auto node = this->astCtxt->bvadd(op2, this->astCtxt->bvadd(op3, this->astCtxt->bvmul(op4, op5)));
8157 node = this->astCtxt->zx(dst.
getBitSize() - leaSize, node);
8160 node = this->astCtxt->extract(dst.
getHigh(), dst.
getLow(), node);
8166 expr->isTainted = this->taintEngine->
setTaint(dst, this->taintEngine->
isTainted(srcBase) | this->taintEngine->isTainted(srcIndex));
8169 this->controlFlow_s(inst);
8206 alignAddStack_s(inst, bp1.getSize());
8209 this->controlFlow_s(inst);
8215 this->controlFlow_s(inst);
8228 this->controlFlow_s(inst);
8234 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8239 auto node2 = this->astCtxt->ite(
8240 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8241 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::byte, index.getBitSize())),
8251 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8254 this->controlFlow_s(inst);
8267 this->controlFlow_s(inst);
8273 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8278 auto node2 = this->astCtxt->ite(
8279 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8290 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8293 this->controlFlow_s(inst);
8306 this->controlFlow_s(inst);
8312 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8317 auto node2 = this->astCtxt->ite(
8318 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8329 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8332 this->controlFlow_s(inst);
8345 this->controlFlow_s(inst);
8351 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
8356 auto node2 = this->astCtxt->ite(
8357 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
8358 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::word, index.getBitSize())),
8368 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
8371 this->controlFlow_s(inst);
8382 auto op2 = this->symbolicEngine->
getOperandAst(inst, count);
8385 auto node1 = this->astCtxt->ite(
8386 this->astCtxt->equal(op2, this->astCtxt->bv(0, op2->getBitvectorSize())),
8395 if (op2->evaluate()) {
8405 auto node2 = this->astCtxt->bvsub(op2, this->astCtxt->bv(1, op2->getBitvectorSize()));
8428 node = this->astCtxt->ite(
8429 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8430 this->astCtxt->bv(bvSize2, bvSize1),
8431 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8432 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8433 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8434 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8435 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8436 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8437 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8438 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8439 this->astCtxt->bv(8, bvSize1))))))))));
8442 node = this->astCtxt->ite(
8443 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8444 this->astCtxt->bv(bvSize2, bvSize1),
8445 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8446 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8447 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8448 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8449 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8450 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8451 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8452 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8453 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 9, bvSize2 - 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
8454 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 10, bvSize2 - 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
8455 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 11, bvSize2 - 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
8456 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 12, bvSize2 - 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
8457 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 13, bvSize2 - 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
8458 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 14, bvSize2 - 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
8459 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 15, bvSize2 - 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
8460 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 16, bvSize2 - 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
8461 this->astCtxt->bv(16, bvSize1))))))))))))))))));
8464 node = this->astCtxt->ite(
8465 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8466 this->astCtxt->bv(bvSize2, bvSize1),
8467 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8468 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8469 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8470 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8471 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8472 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8473 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8474 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8475 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 9, bvSize2 - 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
8476 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 10, bvSize2 - 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
8477 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 11, bvSize2 - 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
8478 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 12, bvSize2 - 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
8479 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 13, bvSize2 - 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
8480 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 14, bvSize2 - 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
8481 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 15, bvSize2 - 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
8482 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 16, bvSize2 - 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
8483 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 17, bvSize2 - 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
8484 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 18, bvSize2 - 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
8485 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 19, bvSize2 - 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
8486 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 20, bvSize2 - 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
8487 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 21, bvSize2 - 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
8488 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 22, bvSize2 - 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
8489 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 23, bvSize2 - 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
8490 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 24, bvSize2 - 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
8491 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 25, bvSize2 - 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
8492 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 26, bvSize2 - 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
8493 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 27, bvSize2 - 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
8494 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 28, bvSize2 - 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
8495 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 29, bvSize2 - 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
8496 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 30, bvSize2 - 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
8497 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 31, bvSize2 - 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
8498 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 32, bvSize2 - 32, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
8499 this->astCtxt->bv(32, bvSize1))))))))))))))))))))))))))))))))));
8502 node = this->astCtxt->ite(
8503 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
8504 this->astCtxt->bv(bvSize2, bvSize1),
8505 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 1, bvSize2 - 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
8506 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 2, bvSize2 - 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
8507 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 3, bvSize2 - 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
8508 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 4, bvSize2 - 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
8509 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 5, bvSize2 - 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
8510 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 6, bvSize2 - 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
8511 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 7, bvSize2 - 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
8512 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 8, bvSize2 - 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
8513 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 9, bvSize2 - 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
8514 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 10, bvSize2 - 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
8515 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 11, bvSize2 - 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
8516 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 12, bvSize2 - 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
8517 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 13, bvSize2 - 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
8518 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 14, bvSize2 - 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
8519 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 15, bvSize2 - 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
8520 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 16, bvSize2 - 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
8521 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 17, bvSize2 - 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
8522 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 18, bvSize2 - 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
8523 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 19, bvSize2 - 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
8524 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 20, bvSize2 - 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
8525 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 21, bvSize2 - 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
8526 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 22, bvSize2 - 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
8527 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 23, bvSize2 - 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
8528 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 24, bvSize2 - 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
8529 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 25, bvSize2 - 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
8530 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 26, bvSize2 - 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
8531 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 27, bvSize2 - 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
8532 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 28, bvSize2 - 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
8533 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 29, bvSize2 - 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
8534 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 30, bvSize2 - 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
8535 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 31, bvSize2 - 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
8536 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 32, bvSize2 - 32, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
8537 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 33, bvSize2 - 33, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
8538 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 34, bvSize2 - 34, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
8539 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 35, bvSize2 - 35, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
8540 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 36, bvSize2 - 36, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
8541 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 37, bvSize2 - 37, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
8542 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 38, bvSize2 - 38, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
8543 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 39, bvSize2 - 39, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
8544 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 40, bvSize2 - 40, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
8545 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 41, bvSize2 - 41, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
8546 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 42, bvSize2 - 42, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
8547 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 43, bvSize2 - 43, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
8548 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 44, bvSize2 - 44, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
8549 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 45, bvSize2 - 45, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
8550 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 46, bvSize2 - 46, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
8551 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 47, bvSize2 - 47, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
8552 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 48, bvSize2 - 48, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
8553 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 49, bvSize2 - 49, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
8554 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 50, bvSize2 - 50, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
8555 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 51, bvSize2 - 51, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
8556 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 52, bvSize2 - 52, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
8557 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 53, bvSize2 - 53, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
8558 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 54, bvSize2 - 54, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
8559 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 55, bvSize2 - 55, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
8560 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 56, bvSize2 - 56, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
8561 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 57, bvSize2 - 57, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
8562 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 58, bvSize2 - 58, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
8563 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 59, bvSize2 - 59, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
8564 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 60, bvSize2 - 60, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
8565 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 61, bvSize2 - 61, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
8566 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 62, bvSize2 - 62, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
8567 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 63, bvSize2 - 63, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
8568 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(bvSize2 - 64, bvSize2 - 64, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
8569 this->astCtxt->bv(64, bvSize1))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))));
8582 this->cfLzcnt_s(inst, expr, src, op1);
8583 this->zf_s(inst, expr, src);
8586 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
8587 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
8588 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
8589 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
8592 this->controlFlow_s(inst);
8604 this->controlFlow_s(inst);
8627 if (
id >= triton::arch::ID_REG_X86_CS &&
id <= triton::arch::ID_REG_X86_SS) {
8628 node = this->astCtxt->extract(dst.
getBitSize()-1, 0, node);
8630 if (
id >= triton::arch::ID_REG_X86_CR0 &&
id <= triton::arch::ID_REG_X86_CR15) {
8640 if (
id >= triton::arch::ID_REG_X86_CS &&
id <= triton::arch::ID_REG_X86_SS) {
8643 if (
id >= triton::arch::ID_REG_X86_CR0 &&
id <= triton::arch::ID_REG_X86_CR15) {
8656 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
8657 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
8658 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
8659 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
8660 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
8661 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
8665 this->controlFlow_s(inst);
8683 this->controlFlow_s(inst);
8701 this->controlFlow_s(inst);
8719 this->controlFlow_s(inst);
8731 std::vector<triton::ast::SharedAbstractNode> exprs;
8732 for (
size_t i = 0; i < src.
getSize(); ++i) {
8737 auto node = this->astCtxt->concat(exprs);
8746 this->controlFlow_s(inst);
8782 this->updateFTW(inst, expr);
8789 this->controlFlow_s(inst);
8810 this->controlFlow_s(inst);
8831 this->controlFlow_s(inst);
8849 this->controlFlow_s(inst);
8867 this->controlFlow_s(inst);
8880 auto node = this->astCtxt->concat(
8889 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8892 this->controlFlow_s(inst);
8909 node = this->astCtxt->concat(
8924 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8927 this->controlFlow_s(inst);
8944 node = this->astCtxt->concat(
8959 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8962 this->controlFlow_s(inst);
8975 auto node = this->astCtxt->concat(
8984 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
8987 this->controlFlow_s(inst);
9004 node = this->astCtxt->concat(
9019 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9022 this->controlFlow_s(inst);
9039 node = this->astCtxt->concat(
9054 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9057 this->controlFlow_s(inst);
9069 auto node = this->astCtxt->zx(30,
9070 this->astCtxt->concat(
9071 this->astCtxt->extract(127, 127, op2),
9072 this->astCtxt->extract(63, 63, op2)
9083 this->controlFlow_s(inst);
9095 std::vector<triton::ast::SharedAbstractNode> signs;
9098 signs.push_back(this->astCtxt->extract(127, 127, op2));
9099 signs.push_back(this->astCtxt->extract(95, 95, op2));
9100 signs.push_back(this->astCtxt->extract(63, 63, op2));
9101 signs.push_back(this->astCtxt->extract(31, 31, op2));
9103 auto node = this->astCtxt->zx(28, this->astCtxt->concat(signs));
9112 this->controlFlow_s(inst);
9130 this->controlFlow_s(inst);
9148 this->controlFlow_s(inst);
9166 this->controlFlow_s(inst);
9184 this->controlFlow_s(inst);
9202 this->controlFlow_s(inst);
9213 std::vector<triton::ast::SharedAbstractNode> bytes;
9216 bytes.push_back(this->astCtxt->extract(127, 96, op2));
9217 bytes.push_back(this->astCtxt->extract(127, 96, op2));
9218 bytes.push_back(this->astCtxt->extract(63, 32, op2));
9219 bytes.push_back(this->astCtxt->extract(63, 32, op2));
9221 auto node = this->astCtxt->concat(bytes);
9230 this->controlFlow_s(inst);
9241 std::vector<triton::ast::SharedAbstractNode> bytes;
9244 bytes.push_back(this->astCtxt->extract(95, 64, op2));
9245 bytes.push_back(this->astCtxt->extract(95, 64, op2));
9246 bytes.push_back(this->astCtxt->extract(31, 0, op2));
9247 bytes.push_back(this->astCtxt->extract(31, 0, op2));
9249 auto node = this->astCtxt->concat(bytes);
9258 this->controlFlow_s(inst);
9278 node = this->astCtxt->concat(
9304 this->updateFTW(inst, expr);
9309 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9314 this->controlFlow_s(inst);
9336 this->controlFlow_s(inst);
9350 this->controlFlow_s(inst);
9356 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9357 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9362 auto node2 = this->astCtxt->ite(
9363 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9364 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::byte, index1.getBitSize())),
9365 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::byte, index1.getBitSize()))
9367 auto node3 = this->astCtxt->ite(
9368 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9369 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::byte, index2.getBitSize())),
9370 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::byte, index2.getBitSize()))
9380 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9381 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9384 this->controlFlow_s(inst);
9398 this->controlFlow_s(inst);
9410 auto node = this->astCtxt->concat(
9411 this->astCtxt->extract(127, 64, op2),
9412 this->astCtxt->extract(63, 0, op1)
9424 auto node = this->astCtxt->extract(63, 0, op1);
9433 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9434 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9439 auto node2 = this->astCtxt->ite(
9440 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9444 auto node3 = this->astCtxt->ite(
9445 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9457 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9458 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9462 this->controlFlow_s(inst);
9480 this->controlFlow_s(inst);
9498 this->controlFlow_s(inst);
9516 node = this->astCtxt->concat(upper, node);
9527 this->controlFlow_s(inst);
9541 this->controlFlow_s(inst);
9547 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9548 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9553 auto node2 = this->astCtxt->ite(
9554 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9558 auto node3 = this->astCtxt->ite(
9559 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9571 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9572 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9575 this->controlFlow_s(inst);
9589 this->controlFlow_s(inst);
9595 auto op2 = this->symbolicEngine->
getOperandAst(inst, index1);
9596 auto op3 = this->symbolicEngine->
getOperandAst(inst, index2);
9601 auto node2 = this->astCtxt->ite(
9602 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9603 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::word, index1.getBitSize())),
9604 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::word, index1.getBitSize()))
9606 auto node3 = this->astCtxt->ite(
9607 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
9608 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::word, index2.getBitSize())),
9609 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::word, index2.getBitSize()))
9619 expr2->isTainted = this->taintEngine->
taintUnion(index1, index1);
9620 expr3->isTainted = this->taintEngine->
taintUnion(index2, index2);
9623 this->controlFlow_s(inst);
9644 this->controlFlow_s(inst);
9665 this->controlFlow_s(inst);
9686 this->controlFlow_s(inst);
9693 switch (src2.getSize()) {
9707 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
9710 this->cfMul_s(inst, expr, src2, ah);
9711 this->ofMul_s(inst, expr, src2, ah);
9724 auto ax = this->astCtxt->bvmul(op1, op2);
9727 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9733 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9734 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9736 this->cfMul_s(inst, expr2, src2, dx);
9737 this->ofMul_s(inst, expr2, src2, dx);
9750 auto eax = this->astCtxt->bvmul(op1, op2);
9753 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9759 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9760 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9762 this->cfMul_s(inst, expr2, src2, edx);
9763 this->ofMul_s(inst, expr2, src2, edx);
9777 auto rax = this->astCtxt->bvmul(op1, op2);
9780 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9786 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9787 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9789 this->cfMul_s(inst, expr2, src2, rdx);
9790 this->ofMul_s(inst, expr2, src2, rdx);
9797 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
9798 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
9799 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
9800 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
9803 this->controlFlow_s(inst);
9808 switch (inst.
operands[0].getSize()) {
9823 auto node1 = this->astCtxt->bvmul(op1, op2);
9831 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9832 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9834 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src1);
9835 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9852 auto node1 = this->astCtxt->bvmul(op1, op2);
9860 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src1);
9861 expr1->isTainted = this->taintEngine->
taintUnion(dst2, src2);
9863 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src1);
9864 expr2->isTainted = this->taintEngine->
taintUnion(dst1, src2);
9871 this->controlFlow_s(inst);
9882 auto node = this->astCtxt->bvneg(op1);
9888 expr->isTainted = this->taintEngine->
taintUnion(src, src);
9891 this->afNeg_s(inst, expr, src, op1);
9892 this->cfNeg_s(inst, expr, src, op1);
9893 this->ofNeg_s(inst, expr, src, op1);
9894 this->pf_s(inst, expr, src);
9895 this->sf_s(inst, expr, src);
9896 this->zf_s(inst, expr, src);
9899 this->controlFlow_s(inst);
9905 this->controlFlow_s(inst);
9916 auto node = this->astCtxt->bvnot(op1);
9922 expr->isTainted = this->taintEngine->
taintUnion(src, src);
9925 this->controlFlow_s(inst);
9938 auto node = this->astCtxt->bvor(op1, op2);
9944 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9947 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
9948 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
9949 this->pf_s(inst, expr, dst);
9950 this->sf_s(inst, expr, dst);
9951 this->zf_s(inst, expr, dst);
9954 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
9957 this->controlFlow_s(inst);
9970 auto node = this->astCtxt->bvor(op1, op2);
9976 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
9979 this->controlFlow_s(inst);
9992 auto node = this->astCtxt->bvor(op1, op2);
9998 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10001 this->controlFlow_s(inst);
10014 std::vector<triton::ast::SharedAbstractNode> pck;
10017 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
10022 auto signed_word = this->astCtxt->extract(high, low, ops[i]);
10023 pck.push_back(this->astCtxt->ite(
10026 this->astCtxt->ite(
10034 auto node = this->astCtxt->concat(pck);
10040 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10043 this->controlFlow_s(inst);
10056 std::vector<triton::ast::SharedAbstractNode> pck;
10059 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
10065 auto signed_dword = this->astCtxt->extract(high, low, ops[idx]);
10066 pck.push_back(this->astCtxt->ite(
10069 this->astCtxt->ite(
10077 auto node = this->astCtxt->concat(pck);
10083 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10086 this->controlFlow_s(inst);
10099 std::vector<triton::ast::SharedAbstractNode> pck;
10102 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
10107 auto signed_word = this->astCtxt->extract(high, low, ops[i]);
10108 pck.push_back(this->astCtxt->ite(
10111 this->astCtxt->ite(
10119 auto node = this->astCtxt->concat(pck);
10125 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10128 this->controlFlow_s(inst);
10141 std::vector<triton::ast::SharedAbstractNode> packed;
10142 packed.reserve(16);
10148 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 120, op1), this->astCtxt->extract(127, 120, op2)));
10149 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(119, 112, op1), this->astCtxt->extract(119, 112, op2)));
10150 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(111, 104, op1), this->astCtxt->extract(111, 104, op2)));
10151 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(103, 96, op1), this->astCtxt->extract(103, 96, op2)));
10152 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(95, 88, op1), this->astCtxt->extract(95, 88, op2)));
10153 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(87, 80, op1), this->astCtxt->extract(87, 80, op2)));
10154 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(79, 72, op1), this->astCtxt->extract(79, 72, op2)));
10155 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(71, 64, op1), this->astCtxt->extract(71, 64, op2)));
10159 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 56, op1), this->astCtxt->extract(63, 56, op2)));
10160 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(55, 48, op1), this->astCtxt->extract(55, 48, op2)));
10161 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(47, 40, op1), this->astCtxt->extract(47, 40, op2)));
10162 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(39, 32, op1), this->astCtxt->extract(39, 32, op2)));
10163 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(31, 24, op1), this->astCtxt->extract(31, 24, op2)));
10164 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(23, 16, op1), this->astCtxt->extract(23, 16, op2)));
10165 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(15, 8, op1), this->astCtxt->extract(15, 8, op2)));
10166 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(7, 0, op1), this->astCtxt->extract(7, 0, op2)));
10174 auto node = this->astCtxt->concat(packed);
10181 this->updateFTW(inst, expr);
10185 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10188 this->controlFlow_s(inst);
10201 std::vector<triton::ast::SharedAbstractNode> packed;
10208 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(127, 96, op2)));
10209 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(95, 64, op1), this->astCtxt->extract(95, 64, op2)));
10213 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(63, 32, op2)));
10214 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
10222 auto node = this->astCtxt->concat(packed);
10229 this->updateFTW(inst, expr);
10233 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10236 this->controlFlow_s(inst);
10249 std::vector<triton::ast::SharedAbstractNode> packed;
10256 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(127, 64, op2)));
10260 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 0, op1), this->astCtxt->extract(63, 0, op2)));
10268 auto node = this->astCtxt->concat(packed);
10275 this->updateFTW(inst, expr);
10279 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10282 this->controlFlow_s(inst);
10295 std::vector<triton::ast::SharedAbstractNode> packed;
10302 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(127, 112, op2)));
10303 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(111, 96, op2)));
10304 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(95, 80, op1), this->astCtxt->extract(95, 80, op2)));
10305 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(79, 64, op1), this->astCtxt->extract(79, 64, op2)));
10309 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(63, 48, op2)));
10310 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(47, 32, op2)));
10311 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(31, 16, op2)));
10312 packed.push_back(this->astCtxt->bvadd(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
10320 auto node = this->astCtxt->concat(packed);
10327 this->updateFTW(inst, expr);
10331 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10334 this->controlFlow_s(inst);
10346 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10347 auto op3 = this->astCtxt->zx(size - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
10350 auto node = this->astCtxt->extract(
10352 this->astCtxt->bvlshr(
10353 this->astCtxt->concat(op1, op2),
10354 this->astCtxt->bvmul(
10355 this->astCtxt->ite(
10356 this->astCtxt->bvuge(op3, this->astCtxt->bv(2 * dst.
getSize(), size)),
10357 this->astCtxt->bv(2 * dst.
getSize(), size),
10366 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
10369 this->controlFlow_s(inst);
10382 auto node = this->astCtxt->bvand(op1, op2);
10388 this->updateFTW(inst, expr);
10391 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10394 this->controlFlow_s(inst);
10407 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op1), op2);
10413 this->updateFTW(inst, expr);
10416 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10419 this->controlFlow_s(inst);
10425 this->controlFlow_s(inst);
10438 std::vector<triton::ast::SharedAbstractNode> pck;
10446 this->astCtxt->bvlshr(
10447 this->astCtxt->bvadd(
10448 this->astCtxt->bvadd(
10449 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op1)),
10450 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op2))
10460 auto node = this->astCtxt->concat(pck);
10466 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10469 this->controlFlow_s(inst);
10482 std::vector<triton::ast::SharedAbstractNode> pck;
10490 this->astCtxt->bvlshr(
10491 this->astCtxt->bvadd(
10492 this->astCtxt->bvadd(
10493 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op1)),
10494 this->astCtxt->zx(1, this->astCtxt->extract(high, low, op2))
10504 auto node = this->astCtxt->concat(pck);
10510 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10513 this->controlFlow_s(inst);
10526 std::vector<triton::ast::SharedAbstractNode> pck;
10532 pck.push_back(this->astCtxt->ite(
10533 this->astCtxt->equal(
10534 this->astCtxt->extract(high, low, op1),
10535 this->astCtxt->extract(high, low, op2)),
10541 auto node = this->astCtxt->concat(pck);
10547 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10550 this->controlFlow_s(inst);
10563 std::vector<triton::ast::SharedAbstractNode> pck;
10569 pck.push_back(this->astCtxt->ite(
10570 this->astCtxt->equal(
10571 this->astCtxt->extract(high, low, op1),
10572 this->astCtxt->extract(high, low, op2)),
10578 auto node = this->astCtxt->concat(pck);
10584 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10587 this->controlFlow_s(inst);
10600 std::vector<triton::ast::SharedAbstractNode> pck;
10606 pck.push_back(this->astCtxt->ite(
10607 this->astCtxt->equal(
10608 this->astCtxt->extract(high, low, op1),
10609 this->astCtxt->extract(high, low, op2)),
10615 auto node = this->astCtxt->concat(pck);
10621 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10624 this->controlFlow_s(inst);
10637 std::vector<triton::ast::SharedAbstractNode> pck;
10643 pck.push_back(this->astCtxt->ite(
10644 this->astCtxt->bvsgt(
10645 this->astCtxt->extract(high, low, op1),
10646 this->astCtxt->extract(high, low, op2)),
10652 auto node = this->astCtxt->concat(pck);
10658 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10661 this->controlFlow_s(inst);
10674 std::vector<triton::ast::SharedAbstractNode> pck;
10680 pck.push_back(this->astCtxt->ite(
10681 this->astCtxt->bvsgt(
10682 this->astCtxt->extract(high, low, op1),
10683 this->astCtxt->extract(high, low, op2)),
10689 auto node = this->astCtxt->concat(pck);
10695 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10698 this->controlFlow_s(inst);
10711 std::vector<triton::ast::SharedAbstractNode> pck;
10717 pck.push_back(this->astCtxt->ite(
10718 this->astCtxt->bvsgt(
10719 this->astCtxt->extract(high, low, op1),
10720 this->astCtxt->extract(high, low, op2)),
10726 auto node = this->astCtxt->concat(pck);
10732 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10735 this->controlFlow_s(inst);
10748 std::vector<triton::ast::SharedAbstractNode> pck;
10754 pck.push_back(this->astCtxt->ite(
10755 this->astCtxt->bvsle(
10756 this->astCtxt->extract(high, low, op1),
10757 this->astCtxt->extract(high, low, op2)),
10758 this->astCtxt->extract(high, low, op2),
10759 this->astCtxt->extract(high, low, op1))
10763 auto node = this->astCtxt->concat(pck);
10769 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
10772 this->controlFlow_s(inst);
10783 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10784 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10787 this->astCtxt->bvlshr(
10800 this->controlFlow_s(inst);
10811 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10812 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10815 this->astCtxt->bvlshr(
10828 this->controlFlow_s(inst);
10839 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10840 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10843 this->astCtxt->bvlshr(
10856 this->controlFlow_s(inst);
10881 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10882 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10885 this->astCtxt->bvlshr(
10898 this->controlFlow_s(inst);
10909 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10910 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10916 mask = mask << (sel * 8);
10919 auto temp = this->astCtxt->bvand(
10920 this->astCtxt->bvshl(
10921 this->astCtxt->zx(120, this->astCtxt->extract(7, 0, op2)),
10922 this->astCtxt->bv(sel * 8, 128)
10924 this->astCtxt->bv(mask, 128)
10928 auto node = this->astCtxt->bvor(
10929 this->astCtxt->bvand(
10931 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
10940 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
10943 this->controlFlow_s(inst);
10954 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
10955 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
10961 mask = mask << (sel * 32);
10964 auto temp = this->astCtxt->bvand(
10965 this->astCtxt->bvshl(
10966 this->astCtxt->zx(96, this->astCtxt->extract(31, 0, op2)),
10967 this->astCtxt->bv(sel * 32, 128)
10969 this->astCtxt->bv(mask, 128)
10973 auto node = this->astCtxt->bvor(
10974 this->astCtxt->bvand(
10976 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
10985 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
10988 this->controlFlow_s(inst);
10999 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
11000 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
11006 mask = mask << (sel * 64);
11009 auto temp = this->astCtxt->bvand(
11010 this->astCtxt->bvshl(
11011 this->astCtxt->zx(64, this->astCtxt->extract(63, 0, op2)),
11012 this->astCtxt->bv(sel * 64, 128)
11014 this->astCtxt->bv(mask, 128)
11018 auto node = this->astCtxt->bvor(
11019 this->astCtxt->bvand(
11021 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
11030 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
11033 this->controlFlow_s(inst);
11046 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
11047 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
11063 case 1: mask = mask << 16;
break;
11064 case 2: mask = mask << 32;
break;
11065 case 3: mask = mask << 48;
break;
11087 case 1: mask = mask << 16;
break;
11088 case 2: mask = mask << 32;
break;
11089 case 3: mask = mask << 48;
break;
11090 case 4: mask = mask << 64;
break;
11091 case 5: mask = mask << 80;
break;
11092 case 6: mask = mask << 96;
break;
11093 case 7: mask = mask << 112;
break;
11098 auto temp = this->astCtxt->bvand(
11099 this->astCtxt->bvshl(
11100 this->astCtxt->zx(112, this->astCtxt->extract(15, 0, op2)),
11101 this->astCtxt->bv(sel * 16, 128)
11103 this->astCtxt->bv(mask, 128)
11107 auto node = this->astCtxt->bvor(
11108 this->astCtxt->bvand(
11110 this->astCtxt->bvnot(this->astCtxt->bv(mask, 128))
11119 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
11122 this->controlFlow_s(inst);
11135 std::vector<triton::ast::SharedAbstractNode> pck;
11141 auto node1 = this->astCtxt->bvmul(
11147 auto node2 = this->astCtxt->bvmul(
11151 pck.push_back(this->astCtxt->bvadd(node1, node2));
11154 auto node = this->astCtxt->concat(pck);
11160 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11163 this->controlFlow_s(inst);
11176 std::vector<triton::ast::SharedAbstractNode> pck;
11182 pck.push_back(this->astCtxt->ite(
11183 this->astCtxt->bvsle(
11184 this->astCtxt->extract(high, low, op1),
11185 this->astCtxt->extract(high, low, op2)),
11186 this->astCtxt->extract(high, low, op2),
11187 this->astCtxt->extract(high, low, op1))
11191 auto node = this->astCtxt->concat(pck);
11197 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11200 this->controlFlow_s(inst);
11213 std::vector<triton::ast::SharedAbstractNode> pck;
11219 pck.push_back(this->astCtxt->ite(
11220 this->astCtxt->bvsle(
11221 this->astCtxt->extract(high, low, op1),
11222 this->astCtxt->extract(high, low, op2)),
11223 this->astCtxt->extract(high, low, op2),
11224 this->astCtxt->extract(high, low, op1))
11228 auto node = this->astCtxt->concat(pck);
11234 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11237 this->controlFlow_s(inst);
11250 std::vector<triton::ast::SharedAbstractNode> pck;
11256 pck.push_back(this->astCtxt->ite(
11257 this->astCtxt->bvule(
11258 this->astCtxt->extract(high, low, op1),
11259 this->astCtxt->extract(high, low, op2)),
11260 this->astCtxt->extract(high, low, op2),
11261 this->astCtxt->extract(high, low, op1))
11265 auto node = this->astCtxt->concat(pck);
11271 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11274 this->controlFlow_s(inst);
11287 std::vector<triton::ast::SharedAbstractNode> pck;
11293 pck.push_back(this->astCtxt->ite(
11294 this->astCtxt->bvule(
11295 this->astCtxt->extract(high, low, op1),
11296 this->astCtxt->extract(high, low, op2)),
11297 this->astCtxt->extract(high, low, op2),
11298 this->astCtxt->extract(high, low, op1))
11302 auto node = this->astCtxt->concat(pck);
11308 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11311 this->controlFlow_s(inst);
11324 std::vector<triton::ast::SharedAbstractNode> pck;
11330 pck.push_back(this->astCtxt->ite(
11331 this->astCtxt->bvule(
11332 this->astCtxt->extract(high, low, op1),
11333 this->astCtxt->extract(high, low, op2)),
11334 this->astCtxt->extract(high, low, op2),
11335 this->astCtxt->extract(high, low, op1))
11339 auto node = this->astCtxt->concat(pck);
11345 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11348 this->controlFlow_s(inst);
11361 std::vector<triton::ast::SharedAbstractNode> pck;
11367 pck.push_back(this->astCtxt->ite(
11368 this->astCtxt->bvsge(
11369 this->astCtxt->extract(high, low, op1),
11370 this->astCtxt->extract(high, low, op2)),
11371 this->astCtxt->extract(high, low, op2),
11372 this->astCtxt->extract(high, low, op1))
11376 auto node = this->astCtxt->concat(pck);
11382 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11385 this->controlFlow_s(inst);
11398 std::vector<triton::ast::SharedAbstractNode> pck;
11404 pck.push_back(this->astCtxt->ite(
11405 this->astCtxt->bvsge(
11406 this->astCtxt->extract(high, low, op1),
11407 this->astCtxt->extract(high, low, op2)),
11408 this->astCtxt->extract(high, low, op2),
11409 this->astCtxt->extract(high, low, op1))
11413 auto node = this->astCtxt->concat(pck);
11419 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11422 this->controlFlow_s(inst);
11435 std::vector<triton::ast::SharedAbstractNode> pck;
11441 pck.push_back(this->astCtxt->ite(
11442 this->astCtxt->bvsge(
11443 this->astCtxt->extract(high, low, op1),
11444 this->astCtxt->extract(high, low, op2)),
11445 this->astCtxt->extract(high, low, op2),
11446 this->astCtxt->extract(high, low, op1))
11450 auto node = this->astCtxt->concat(pck);
11456 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11459 this->controlFlow_s(inst);
11472 std::vector<triton::ast::SharedAbstractNode> pck;
11478 pck.push_back(this->astCtxt->ite(
11479 this->astCtxt->bvuge(
11480 this->astCtxt->extract(high, low, op1),
11481 this->astCtxt->extract(high, low, op2)),
11482 this->astCtxt->extract(high, low, op2),
11483 this->astCtxt->extract(high, low, op1))
11487 auto node = this->astCtxt->concat(pck);
11493 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11496 this->controlFlow_s(inst);
11509 std::vector<triton::ast::SharedAbstractNode> pck;
11515 pck.push_back(this->astCtxt->ite(
11516 this->astCtxt->bvuge(
11517 this->astCtxt->extract(high, low, op1),
11518 this->astCtxt->extract(high, low, op2)),
11519 this->astCtxt->extract(high, low, op2),
11520 this->astCtxt->extract(high, low, op1))
11524 auto node = this->astCtxt->concat(pck);
11530 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11533 this->controlFlow_s(inst);
11546 std::vector<triton::ast::SharedAbstractNode> pck;
11552 pck.push_back(this->astCtxt->ite(
11553 this->astCtxt->bvuge(
11554 this->astCtxt->extract(high, low, op1),
11555 this->astCtxt->extract(high, low, op2)),
11556 this->astCtxt->extract(high, low, op2),
11557 this->astCtxt->extract(high, low, op1))
11561 auto node = this->astCtxt->concat(pck);
11567 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11570 this->controlFlow_s(inst);
11582 std::vector<triton::ast::SharedAbstractNode> mskb;
11587 mskb.push_back(this->astCtxt->extract(127, 127, op2));
11588 mskb.push_back(this->astCtxt->extract(119, 119, op2));
11589 mskb.push_back(this->astCtxt->extract(111, 111, op2));
11590 mskb.push_back(this->astCtxt->extract(103, 103, op2));
11591 mskb.push_back(this->astCtxt->extract(95, 95, op2));
11592 mskb.push_back(this->astCtxt->extract(87, 87, op2));
11593 mskb.push_back(this->astCtxt->extract(79, 79, op2));
11594 mskb.push_back(this->astCtxt->extract(71, 71, op2));
11597 mskb.push_back(this->astCtxt->extract(63, 63, op2));
11598 mskb.push_back(this->astCtxt->extract(55, 55, op2));
11599 mskb.push_back(this->astCtxt->extract(47, 47, op2));
11600 mskb.push_back(this->astCtxt->extract(39, 39, op2));
11601 mskb.push_back(this->astCtxt->extract(31, 31, op2));
11602 mskb.push_back(this->astCtxt->extract(23, 23, op2));
11603 mskb.push_back(this->astCtxt->extract(15, 15, op2));
11604 mskb.push_back(this->astCtxt->extract(7, 7, op2));
11607 auto node = this->astCtxt->zx(
11609 this->astCtxt->concat(mskb)
11619 this->controlFlow_s(inst);
11631 std::vector<triton::ast::SharedAbstractNode> pck;
11639 auto node = this->astCtxt->concat(pck);
11648 this->controlFlow_s(inst);
11660 std::vector<triton::ast::SharedAbstractNode> pck;
11666 auto node = this->astCtxt->concat(pck);
11675 this->controlFlow_s(inst);
11687 std::vector<triton::ast::SharedAbstractNode> pck;
11699 auto node = this->astCtxt->concat(pck);
11708 this->controlFlow_s(inst);
11720 std::vector<triton::ast::SharedAbstractNode> pck;
11726 auto node = this->astCtxt->concat(pck);
11735 this->controlFlow_s(inst);
11747 std::vector<triton::ast::SharedAbstractNode> pck;
11755 auto node = this->astCtxt->concat(pck);
11764 this->controlFlow_s(inst);
11776 std::vector<triton::ast::SharedAbstractNode> pck;
11782 auto node = this->astCtxt->concat(pck);
11791 this->controlFlow_s(inst);
11803 std::vector<triton::ast::SharedAbstractNode> pck;
11811 auto node = this->astCtxt->concat(pck);
11820 this->controlFlow_s(inst);
11832 std::vector<triton::ast::SharedAbstractNode> pck;
11838 auto node = this->astCtxt->concat(pck);
11847 this->controlFlow_s(inst);
11859 std::vector<triton::ast::SharedAbstractNode> pck;
11871 auto node = this->astCtxt->concat(pck);
11880 this->controlFlow_s(inst);
11892 std::vector<triton::ast::SharedAbstractNode> pck;
11898 auto node = this->astCtxt->concat(pck);
11907 this->controlFlow_s(inst);
11919 std::vector<triton::ast::SharedAbstractNode> pck;
11927 auto node = this->astCtxt->concat(pck);
11936 this->controlFlow_s(inst);
11948 std::vector<triton::ast::SharedAbstractNode> pck;
11954 auto node = this->astCtxt->concat(pck);
11963 this->controlFlow_s(inst);
11976 std::vector<triton::ast::SharedAbstractNode> pck;
11985 pck.push_back(node);
11987 auto node = this->astCtxt->concat(pck);
11993 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
11996 this->controlFlow_s(inst);
12009 std::vector<triton::ast::SharedAbstractNode> pck;
12018 pck.push_back(node);
12020 auto node = this->astCtxt->concat(pck);
12026 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12029 this->controlFlow_s(inst);
12042 std::vector<triton::ast::SharedAbstractNode> pck;
12051 pck.push_back(node);
12053 auto node = this->astCtxt->concat(pck);
12059 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12062 this->controlFlow_s(inst);
12080 node = this->astCtxt->bvmul(n1, n2);
12085 std::vector<triton::ast::SharedAbstractNode> pck;
12094 pck.push_back(this->astCtxt->bvmul(n3, n4));
12095 pck.push_back(this->astCtxt->bvmul(n1, n2));
12097 node = this->astCtxt->concat(pck);
12109 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12112 this->controlFlow_s(inst);
12126 auto node = this->astCtxt->bv(0, dst.
getBitSize());
12128 node = this->astCtxt->bvadd(
12130 this->astCtxt->zx(dst.
getBitSize() - 1, this->astCtxt->extract(i, i, op2))
12141 this->controlFlow_s(inst);
12146 bool stackRelative =
false;
12168 if (this->architecture->
isRegisterValid(base) && this->architecture->getParentRegister(base) == stack) {
12170 alignAddStack_s(inst, src.
getSize());
12173 stackRelative =
true;
12184 stackRelative =
true;
12195 if (!stackRelative)
12196 alignAddStack_s(inst, src.
getSize());
12199 this->controlFlow_s(inst);
12223 auto node1 = this->symbolicEngine->
getOperandAst(inst, src1);
12224 auto node2 = this->symbolicEngine->
getOperandAst(inst, src2);
12225 auto node3 = this->symbolicEngine->
getOperandAst(inst, src3);
12226 auto node4 = this->symbolicEngine->
getOperandAst(inst, src4);
12227 auto node5 = this->symbolicEngine->
getOperandAst(inst, src5);
12228 auto node6 = this->symbolicEngine->
getOperandAst(inst, src6);
12229 auto node7 = this->symbolicEngine->
getOperandAst(inst, src7);
12250 alignAddStack_s(inst, stack.getSize() * 8);
12253 this->controlFlow_s(inst);
12276 auto node1 = this->astCtxt->extract(0, 0, op1);
12277 auto node2 = this->astCtxt->extract(2, 2, op1);
12278 auto node3 = this->astCtxt->extract(4, 4, op1);
12279 auto node4 = this->astCtxt->extract(6, 6, op1);
12280 auto node5 = this->astCtxt->extract(7, 7, op1);
12281 auto node6 = this->astCtxt->extract(8, 8, op1);
12282 auto node7 = this->astCtxt->bvtrue();
12283 auto node8 = this->astCtxt->extract(10, 10, op1);
12284 auto node9 = this->astCtxt->extract(11, 11, op1);
12286 auto node10 = this->astCtxt->extract(14, 14, op1);
12289 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"POPF CF operation");
12290 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"POPF PF operation");
12291 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"POPF AF operation");
12292 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"POPF ZF operation");
12293 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"POPF SF operation");
12294 auto expr6 = this->symbolicEngine->
createSymbolicExpression(inst, node6, dst6.getRegister(),
"POPF TF operation");
12295 auto expr7 = this->symbolicEngine->
createSymbolicExpression(inst, node7, dst7.getRegister(),
"POPF IF operation");
12296 auto expr8 = this->symbolicEngine->
createSymbolicExpression(inst, node8, dst8.getRegister(),
"POPF DF operation");
12297 auto expr9 = this->symbolicEngine->
createSymbolicExpression(inst, node9, dst9.getRegister(),
"POPF OF operation");
12298 auto expr10 = this->symbolicEngine->
createSymbolicExpression(inst, node10, dst10.getRegister(),
"POPF NT operation");
12313 alignAddStack_s(inst, src.
getSize());
12316 this->controlFlow_s(inst);
12342 auto node1 = this->astCtxt->extract(0, 0, op1);
12343 auto node2 = this->astCtxt->extract(2, 2, op1);
12344 auto node3 = this->astCtxt->extract(4, 4, op1);
12345 auto node4 = this->astCtxt->extract(6, 6, op1);
12346 auto node5 = this->astCtxt->extract(7, 7, op1);
12347 auto node6 = this->astCtxt->extract(8, 8, op1);
12348 auto node7 = this->astCtxt->bvtrue();
12349 auto node8 = this->astCtxt->extract(10, 10, op1);
12350 auto node9 = this->astCtxt->extract(11, 11, op1);
12352 auto node10 = this->astCtxt->extract(14, 14, op1);
12353 auto node11 = this->astCtxt->bvfalse();
12355 auto node12 = this->astCtxt->extract(18, 18, op1);
12358 auto node13 = this->astCtxt->extract(21, 21, op1);
12361 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"POPFD CF operation");
12362 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"POPFD PF operation");
12363 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"POPFD AF operation");
12364 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"POPFD ZF operation");
12365 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"POPFD SF operation");
12366 auto expr6 = this->symbolicEngine->
createSymbolicExpression(inst, node6, dst6.getRegister(),
"POPFD TF operation");
12367 auto expr7 = this->symbolicEngine->
createSymbolicExpression(inst, node7, dst7.getRegister(),
"POPFD IF operation");
12368 auto expr8 = this->symbolicEngine->
createSymbolicExpression(inst, node8, dst8.getRegister(),
"POPFD DF operation");
12369 auto expr9 = this->symbolicEngine->
createSymbolicExpression(inst, node9, dst9.getRegister(),
"POPFD OF operation");
12370 auto expr10 = this->symbolicEngine->
createSymbolicExpression(inst, node10, dst10.getRegister(),
"POPFD NT operation");
12371 auto expr11 = this->symbolicEngine->
createSymbolicExpression(inst, node11, dst11.getRegister(),
"POPFD RF operation");
12372 auto expr12 = this->symbolicEngine->
createSymbolicExpression(inst, node12, dst12.getRegister(),
"POPFD AC operation");
12373 auto expr13 = this->symbolicEngine->
createSymbolicExpression(inst, node13, dst13.getRegister(),
"POPFD ID operation");
12391 alignAddStack_s(inst, src.
getSize());
12394 this->controlFlow_s(inst);
12420 auto node1 = this->astCtxt->extract(0, 0, op1);
12421 auto node2 = this->astCtxt->extract(2, 2, op1);
12422 auto node3 = this->astCtxt->extract(4, 4, op1);
12423 auto node4 = this->astCtxt->extract(6, 6, op1);
12424 auto node5 = this->astCtxt->extract(7, 7, op1);
12425 auto node6 = this->astCtxt->extract(8, 8, op1);
12426 auto node7 = this->astCtxt->bvtrue();
12427 auto node8 = this->astCtxt->extract(10, 10, op1);
12428 auto node9 = this->astCtxt->extract(11, 11, op1);
12430 auto node10 = this->astCtxt->extract(14, 14, op1);
12431 auto node11 = this->astCtxt->bvfalse();
12433 auto node12 = this->astCtxt->extract(18, 18, op1);
12436 auto node13 = this->astCtxt->extract(21, 21, op1);
12439 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"POPFQ CF operation");
12440 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"POPFQ PF operation");
12441 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"POPFQ AF operation");
12442 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"POPFQ ZF operation");
12443 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"POPFQ SF operation");
12444 auto expr6 = this->symbolicEngine->
createSymbolicExpression(inst, node6, dst6.getRegister(),
"POPFQ TF operation");
12445 auto expr7 = this->symbolicEngine->
createSymbolicExpression(inst, node7, dst7.getRegister(),
"POPFQ IF operation");
12446 auto expr8 = this->symbolicEngine->
createSymbolicExpression(inst, node8, dst8.getRegister(),
"POPFQ DF operation");
12447 auto expr9 = this->symbolicEngine->
createSymbolicExpression(inst, node9, dst9.getRegister(),
"POPFQ OF operation");
12448 auto expr10 = this->symbolicEngine->
createSymbolicExpression(inst, node10, dst10.getRegister(),
"POPFD NT operation");
12449 auto expr11 = this->symbolicEngine->
createSymbolicExpression(inst, node11, dst11.getRegister(),
"POPFD RF operation");
12450 auto expr12 = this->symbolicEngine->
createSymbolicExpression(inst, node12, dst12.getRegister(),
"POPFD AC operation");
12451 auto expr13 = this->symbolicEngine->
createSymbolicExpression(inst, node13, dst13.getRegister(),
"POPFD ID operation");
12469 alignAddStack_s(inst, src.
getSize());
12472 this->controlFlow_s(inst);
12485 auto node = this->astCtxt->bvor(op1, op2);
12491 this->updateFTW(inst, expr);
12494 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12497 this->controlFlow_s(inst);
12508 this->controlFlow_s(inst);
12520 std::vector<triton::ast::SharedAbstractNode> pack;
12528 int index_high = i+(dst.
getSize() == 8 ? 2 : 3);
12530 this->astCtxt->bvmul(
12532 this->astCtxt->extract(control, control, op2))),
12534 this->astCtxt->bvlshr(
12536 this->astCtxt->bvmul(
12538 this->astCtxt->extract(index_high, index_low, op2)),
12542 auto node = this->astCtxt->concat(pack);
12551 this->controlFlow_s(inst);
12565 std::vector<triton::ast::SharedAbstractNode> pack;
12569 this->astCtxt->extract(31, 0,
12570 this->astCtxt->bvlshr(
12572 this->astCtxt->bvmul(
12580 this->astCtxt->extract(31, 0,
12581 this->astCtxt->bvlshr(
12583 this->astCtxt->bvmul(
12591 this->astCtxt->extract(31, 0,
12592 this->astCtxt->bvlshr(
12594 this->astCtxt->bvmul(
12602 this->astCtxt->extract(31, 0,
12603 this->astCtxt->bvlshr(
12605 this->astCtxt->bvmul(
12613 auto node = this->astCtxt->concat(pack);
12622 this->controlFlow_s(inst);
12636 std::vector<triton::ast::SharedAbstractNode> pack;
12640 this->astCtxt->extract(79, 64,
12641 this->astCtxt->bvlshr(
12643 this->astCtxt->bvmul(
12651 this->astCtxt->extract(79, 64,
12652 this->astCtxt->bvlshr(
12654 this->astCtxt->bvmul(
12662 this->astCtxt->extract(79, 64,
12663 this->astCtxt->bvlshr(
12665 this->astCtxt->bvmul(
12673 this->astCtxt->extract(79, 64,
12674 this->astCtxt->bvlshr(
12676 this->astCtxt->bvmul(
12684 this->astCtxt->extract(63, 0, op2)
12687 auto node = this->astCtxt->concat(pack);
12696 this->controlFlow_s(inst);
12710 std::vector<triton::ast::SharedAbstractNode> pack;
12714 this->astCtxt->extract(127, 64, op2)
12717 this->astCtxt->extract(15, 0,
12718 this->astCtxt->bvlshr(
12720 this->astCtxt->bvmul(
12728 this->astCtxt->extract(15, 0,
12729 this->astCtxt->bvlshr(
12731 this->astCtxt->bvmul(
12739 this->astCtxt->extract(15, 0,
12740 this->astCtxt->bvlshr(
12742 this->astCtxt->bvmul(
12750 this->astCtxt->extract(15, 0,
12751 this->astCtxt->bvlshr(
12753 this->astCtxt->bvmul(
12761 auto node = this->astCtxt->concat(pack);
12770 this->controlFlow_s(inst);
12784 std::vector<triton::ast::SharedAbstractNode> pack;
12788 this->astCtxt->extract(15, 0,
12789 this->astCtxt->bvlshr(
12791 this->astCtxt->bvmul(
12799 this->astCtxt->extract(15, 0,
12800 this->astCtxt->bvlshr(
12802 this->astCtxt->bvmul(
12810 this->astCtxt->extract(15, 0,
12811 this->astCtxt->bvlshr(
12813 this->astCtxt->bvmul(
12821 this->astCtxt->extract(15, 0,
12822 this->astCtxt->bvlshr(
12824 this->astCtxt->bvmul(
12832 auto node = this->astCtxt->concat(pack);
12841 this->controlFlow_s(inst);
12851 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12854 std::vector<triton::ast::SharedAbstractNode> packed;
12860 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(31, 0, op2)));
12861 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 95, 64, op1), this->astCtxt->extract(31, 0, op2)));
12865 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(31, 0, op2)));
12866 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
12873 auto node = this->astCtxt->concat(packed);
12880 this->updateFTW(inst, expr);
12884 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12887 this->controlFlow_s(inst);
12897 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12900 auto node = this->astCtxt->bvshl(
12902 this->astCtxt->bvmul(
12903 this->astCtxt->ite(
12916 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12919 this->controlFlow_s(inst);
12929 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12934 std::vector<triton::ast::SharedAbstractNode> packed;
12940 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(63, 0, op2)));
12941 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 63, 0, op1), this->astCtxt->extract(63, 0, op2)));
12942 node = this->astCtxt->concat(packed);
12948 node = this->astCtxt->bvshl(op1, op2);
12960 this->updateFTW(inst, expr);
12964 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
12967 this->controlFlow_s(inst);
12977 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
12980 std::vector<triton::ast::SharedAbstractNode> packed;
12986 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(15, 0, op2)));
12987 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(15, 0, op2)));
12988 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 95, 80, op1), this->astCtxt->extract(15, 0, op2)));
12989 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract( 79, 64, op1), this->astCtxt->extract(15, 0, op2)));
12993 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(15, 0, op2)));
12994 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(15, 0, op2)));
12995 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(15, 0, op2)));
12996 packed.push_back(this->astCtxt->bvshl(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
13003 auto node = this->astCtxt->concat(packed);
13010 this->updateFTW(inst, expr);
13014 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13017 this->controlFlow_s(inst);
13030 std::vector<triton::ast::SharedAbstractNode> pck;
13033 auto shift = this->astCtxt->ite(
13049 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
13051 auto node = this->astCtxt->concat(pck);
13057 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13060 this->controlFlow_s(inst);
13073 std::vector<triton::ast::SharedAbstractNode> pck;
13076 auto shift = this->astCtxt->ite(
13092 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
13094 auto node = this->astCtxt->concat(pck);
13100 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13103 this->controlFlow_s(inst);
13113 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13116 std::vector<triton::ast::SharedAbstractNode> packed;
13122 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(31, 0, op2)));
13123 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 95, 64, op1), this->astCtxt->extract(31, 0, op2)));
13127 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(31, 0, op2)));
13128 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
13135 auto node = this->astCtxt->concat(packed);
13142 this->updateFTW(inst, expr);
13146 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13149 this->controlFlow_s(inst);
13159 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13162 auto node = this->astCtxt->bvlshr(
13164 this->astCtxt->bvmul(
13165 this->astCtxt->ite(
13178 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13181 this->controlFlow_s(inst);
13191 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13196 std::vector<triton::ast::SharedAbstractNode> packed;
13202 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(63, 0, op2)));
13203 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 63, 0, op1), this->astCtxt->extract(63, 0, op2)));
13204 node = this->astCtxt->concat(packed);
13210 node = this->astCtxt->bvlshr(op1, op2);
13222 this->updateFTW(inst, expr);
13226 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13229 this->controlFlow_s(inst);
13239 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
13242 std::vector<triton::ast::SharedAbstractNode> packed;
13248 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(15, 0, op2)));
13249 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(15, 0, op2)));
13250 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 95, 80, op1), this->astCtxt->extract(15, 0, op2)));
13251 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract( 79, 64, op1), this->astCtxt->extract(15, 0, op2)));
13255 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(15, 0, op2)));
13256 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(15, 0, op2)));
13257 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(15, 0, op2)));
13258 packed.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
13265 auto node = this->astCtxt->concat(packed);
13272 this->updateFTW(inst, expr);
13276 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13279 this->controlFlow_s(inst);
13292 std::vector<triton::ast::SharedAbstractNode> packed;
13293 packed.reserve(16);
13299 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 120, op1), this->astCtxt->extract(127, 120, op2)));
13300 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(119, 112, op1), this->astCtxt->extract(119, 112, op2)));
13301 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(111, 104, op1), this->astCtxt->extract(111, 104, op2)));
13302 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(103, 96, op1), this->astCtxt->extract(103, 96, op2)));
13303 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(95, 88, op1), this->astCtxt->extract(95, 88, op2)));
13304 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(87, 80, op1), this->astCtxt->extract(87, 80, op2)));
13305 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(79, 72, op1), this->astCtxt->extract(79, 72, op2)));
13306 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(71, 64, op1), this->astCtxt->extract(71, 64, op2)));
13310 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 56, op1), this->astCtxt->extract(63, 56, op2)));
13311 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(55, 48, op1), this->astCtxt->extract(55, 48, op2)));
13312 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(47, 40, op1), this->astCtxt->extract(47, 40, op2)));
13313 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(39, 32, op1), this->astCtxt->extract(39, 32, op2)));
13314 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(31, 24, op1), this->astCtxt->extract(31, 24, op2)));
13315 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(23, 16, op1), this->astCtxt->extract(23, 16, op2)));
13316 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(15, 8, op1), this->astCtxt->extract(15, 8, op2)));
13317 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(7, 0, op1), this->astCtxt->extract(7, 0, op2)));
13325 auto node = this->astCtxt->concat(packed);
13332 this->updateFTW(inst, expr);
13336 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13339 this->controlFlow_s(inst);
13352 std::vector<triton::ast::SharedAbstractNode> packed;
13359 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 96, op1), this->astCtxt->extract(127, 96, op2)));
13360 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(95, 64, op1), this->astCtxt->extract(95, 64, op2)));
13364 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 32, op1), this->astCtxt->extract(63, 32, op2)));
13365 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(31, 0, op1), this->astCtxt->extract(31, 0, op2)));
13373 auto node = this->astCtxt->concat(packed);
13380 this->updateFTW(inst, expr);
13384 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13387 this->controlFlow_s(inst);
13400 std::vector<triton::ast::SharedAbstractNode> packed;
13407 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 64, op1), this->astCtxt->extract(127, 64, op2)));
13411 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 0, op1), this->astCtxt->extract(63, 0, op2)));
13419 auto node = this->astCtxt->concat(packed);
13426 this->updateFTW(inst, expr);
13430 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13433 this->controlFlow_s(inst);
13446 std::vector<triton::ast::SharedAbstractNode> packed;
13453 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(127, 112, op1), this->astCtxt->extract(127, 112, op2)));
13454 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(111, 96, op1), this->astCtxt->extract(111, 96, op2)));
13455 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(95, 80, op1), this->astCtxt->extract(95, 80, op2)));
13456 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(79, 64, op1), this->astCtxt->extract(79, 64, op2)));
13460 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(63, 48, op1), this->astCtxt->extract(63, 48, op2)));
13461 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(47, 32, op1), this->astCtxt->extract(47, 32, op2)));
13462 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(31, 16, op1), this->astCtxt->extract(31, 16, op2)));
13463 packed.push_back(this->astCtxt->bvsub(this->astCtxt->extract(15, 0, op1), this->astCtxt->extract(15, 0, op2)));
13471 auto node = this->astCtxt->concat(packed);
13478 this->updateFTW(inst, expr);
13482 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13485 this->controlFlow_s(inst);
13494 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
13495 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
13498 auto node1 = this->astCtxt->bvand(op1, op2);
13499 auto node2 = this->astCtxt->bvand(op1, this->astCtxt->bvnot(op2));
13506 expr1->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
13507 expr2->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
13510 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_AF),
"Clears adjust flag");
13511 this->cfPtest_s(inst, expr2, src1,
true);
13512 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
13513 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_PF),
"Clears parity flag");
13514 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_SF),
"Clears sign flag");
13515 this->zf_s(inst, expr1, src1,
true);
13518 this->controlFlow_s(inst);
13531 std::vector<triton::ast::SharedAbstractNode> unpack;
13532 unpack.reserve(24);
13538 unpack.push_back(this->astCtxt->extract(63, 56, op2));
13539 unpack.push_back(this->astCtxt->extract(63, 56, op1));
13540 unpack.push_back(this->astCtxt->extract(55, 48, op2));
13541 unpack.push_back(this->astCtxt->extract(55, 48, op1));
13542 unpack.push_back(this->astCtxt->extract(47, 40, op2));
13543 unpack.push_back(this->astCtxt->extract(55, 40, op1));
13544 unpack.push_back(this->astCtxt->extract(39, 32, op2));
13545 unpack.push_back(this->astCtxt->extract(39, 32, op1));
13550 unpack.push_back(this->astCtxt->extract(127, 120, op2));
13551 unpack.push_back(this->astCtxt->extract(127, 120, op1));
13552 unpack.push_back(this->astCtxt->extract(119, 112, op2));
13553 unpack.push_back(this->astCtxt->extract(119, 112, op1));
13554 unpack.push_back(this->astCtxt->extract(111, 104, op2));
13555 unpack.push_back(this->astCtxt->extract(111, 104, op1));
13556 unpack.push_back(this->astCtxt->extract(103, 96, op2));
13557 unpack.push_back(this->astCtxt->extract(103, 96, op1));
13558 unpack.push_back(this->astCtxt->extract(95, 88, op2));
13559 unpack.push_back(this->astCtxt->extract(95, 88, op1));
13560 unpack.push_back(this->astCtxt->extract(87, 80, op2));
13561 unpack.push_back(this->astCtxt->extract(87, 80, op1));
13562 unpack.push_back(this->astCtxt->extract(79, 72, op2));
13563 unpack.push_back(this->astCtxt->extract(79, 72, op1));
13564 unpack.push_back(this->astCtxt->extract(71, 64, op2));
13565 unpack.push_back(this->astCtxt->extract(71, 64, op1));
13572 auto node = this->astCtxt->concat(unpack);
13579 this->updateFTW(inst, expr);
13583 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13586 this->controlFlow_s(inst);
13599 std::vector<triton::ast::SharedAbstractNode> unpack;
13606 unpack.push_back(this->astCtxt->extract(63, 32, op2));
13607 unpack.push_back(this->astCtxt->extract(63, 32, op1));
13612 unpack.push_back(this->astCtxt->extract(127, 96, op2));
13613 unpack.push_back(this->astCtxt->extract(127, 96, op1));
13614 unpack.push_back(this->astCtxt->extract(95, 64, op2));
13615 unpack.push_back(this->astCtxt->extract(95, 64, op1));
13622 auto node = this->astCtxt->concat(unpack);
13629 this->updateFTW(inst, expr);
13633 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13636 this->controlFlow_s(inst);
13649 std::vector<triton::ast::SharedAbstractNode> unpack;
13656 unpack.push_back(this->astCtxt->extract(127, 64, op2));
13657 unpack.push_back(this->astCtxt->extract(127, 64, op1));
13664 auto node = this->astCtxt->concat(unpack);
13670 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13673 this->controlFlow_s(inst);
13686 std::vector<triton::ast::SharedAbstractNode> unpack;
13687 unpack.reserve(12);
13693 unpack.push_back(this->astCtxt->extract(63, 48, op2));
13694 unpack.push_back(this->astCtxt->extract(63, 48, op1));
13695 unpack.push_back(this->astCtxt->extract(47, 32, op2));
13696 unpack.push_back(this->astCtxt->extract(47, 32, op1));
13701 unpack.push_back(this->astCtxt->extract(127, 112, op2));
13702 unpack.push_back(this->astCtxt->extract(127, 112, op1));
13703 unpack.push_back(this->astCtxt->extract(111, 96, op2));
13704 unpack.push_back(this->astCtxt->extract(111, 96, op1));
13705 unpack.push_back(this->astCtxt->extract(95, 80, op2));
13706 unpack.push_back(this->astCtxt->extract(95, 80, op1));
13707 unpack.push_back(this->astCtxt->extract(79, 64, op2));
13708 unpack.push_back(this->astCtxt->extract(79, 64, op1));
13715 auto node = this->astCtxt->concat(unpack);
13722 this->updateFTW(inst, expr);
13726 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13729 this->controlFlow_s(inst);
13742 std::vector<triton::ast::SharedAbstractNode> unpack;
13743 unpack.reserve(24);
13749 unpack.push_back(this->astCtxt->extract(31, 24, op2));
13750 unpack.push_back(this->astCtxt->extract(31, 24, op1));
13751 unpack.push_back(this->astCtxt->extract(23, 16, op2));
13752 unpack.push_back(this->astCtxt->extract(23, 16, op1));
13753 unpack.push_back(this->astCtxt->extract(15, 8, op2));
13754 unpack.push_back(this->astCtxt->extract(15, 8, op1));
13755 unpack.push_back(this->astCtxt->extract(7, 0, op2));
13756 unpack.push_back(this->astCtxt->extract(7, 0, op1));
13761 unpack.push_back(this->astCtxt->extract(63, 56, op2));
13762 unpack.push_back(this->astCtxt->extract(63, 56, op1));
13763 unpack.push_back(this->astCtxt->extract(55, 48, op2));
13764 unpack.push_back(this->astCtxt->extract(55, 48, op1));
13765 unpack.push_back(this->astCtxt->extract(47, 40, op2));
13766 unpack.push_back(this->astCtxt->extract(47, 40, op1));
13767 unpack.push_back(this->astCtxt->extract(39, 32, op2));
13768 unpack.push_back(this->astCtxt->extract(39, 32, op1));
13769 unpack.push_back(this->astCtxt->extract(31, 24, op2));
13770 unpack.push_back(this->astCtxt->extract(31, 24, op1));
13771 unpack.push_back(this->astCtxt->extract(23, 16, op2));
13772 unpack.push_back(this->astCtxt->extract(23, 16, op1));
13773 unpack.push_back(this->astCtxt->extract(15, 8, op2));
13774 unpack.push_back(this->astCtxt->extract(15, 8, op1));
13775 unpack.push_back(this->astCtxt->extract(7, 0, op2));
13776 unpack.push_back(this->astCtxt->extract(7, 0, op1));
13783 auto node = this->astCtxt->concat(unpack);
13790 this->updateFTW(inst, expr);
13794 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13797 this->controlFlow_s(inst);
13810 std::vector<triton::ast::SharedAbstractNode> unpack;
13817 unpack.push_back(this->astCtxt->extract(31, 0, op2));
13818 unpack.push_back(this->astCtxt->extract(31, 0, op1));
13823 unpack.push_back(this->astCtxt->extract(63, 32, op2));
13824 unpack.push_back(this->astCtxt->extract(63, 32, op1));
13825 unpack.push_back(this->astCtxt->extract(31, 0, op2));
13826 unpack.push_back(this->astCtxt->extract(31, 0, op1));
13833 auto node = this->astCtxt->concat(unpack);
13840 this->updateFTW(inst, expr);
13844 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13847 this->controlFlow_s(inst);
13860 std::vector<triton::ast::SharedAbstractNode> unpack;
13867 unpack.push_back(this->astCtxt->extract(63, 0, op2));
13868 unpack.push_back(this->astCtxt->extract(63, 0, op1));
13875 auto node = this->astCtxt->concat(unpack);
13881 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13884 this->controlFlow_s(inst);
13897 std::vector<triton::ast::SharedAbstractNode> unpack;
13898 unpack.reserve(12);
13904 unpack.push_back(this->astCtxt->extract(31, 16, op2));
13905 unpack.push_back(this->astCtxt->extract(31, 16, op1));
13906 unpack.push_back(this->astCtxt->extract(15, 0, op2));
13907 unpack.push_back(this->astCtxt->extract(15, 0, op1));
13912 unpack.push_back(this->astCtxt->extract(63, 48, op2));
13913 unpack.push_back(this->astCtxt->extract(63, 48, op1));
13914 unpack.push_back(this->astCtxt->extract(47, 32, op2));
13915 unpack.push_back(this->astCtxt->extract(47, 32, op1));
13916 unpack.push_back(this->astCtxt->extract(31, 16, op2));
13917 unpack.push_back(this->astCtxt->extract(31, 16, op1));
13918 unpack.push_back(this->astCtxt->extract(15, 0, op2));
13919 unpack.push_back(this->astCtxt->extract(15, 0, op1));
13926 auto node = this->astCtxt->concat(unpack);
13933 this->updateFTW(inst, expr);
13937 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
13940 this->controlFlow_s(inst);
13957 auto stackValue = alignSubStack_s(inst, size);
13970 this->controlFlow_s(inst);
13995 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
13996 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
13997 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
13998 auto op4 = this->symbolicEngine->
getOperandAst(inst, src4);
13999 auto op5 = this->symbolicEngine->
getOperandAst(inst, src5);
14000 auto op6 = this->symbolicEngine->
getOperandAst(inst, src6);
14001 auto op7 = this->symbolicEngine->
getOperandAst(inst, src7);
14002 auto op8 = this->symbolicEngine->
getOperandAst(inst, src8);
14005 auto node1 = this->astCtxt->zx(dst1.getBitSize() - src1.getBitSize(), op1);
14006 auto node2 = this->astCtxt->zx(dst2.getBitSize() - src2.getBitSize(), op2);
14007 auto node3 = this->astCtxt->zx(dst3.getBitSize() - src3.getBitSize(), op3);
14008 auto node4 = this->astCtxt->zx(dst4.getBitSize() - src4.getBitSize(), op4);
14009 auto node5 = this->astCtxt->zx(dst5.getBitSize() - src5.getBitSize(), op5);
14010 auto node6 = this->astCtxt->zx(dst6.getBitSize() - src6.getBitSize(), op6);
14011 auto node7 = this->astCtxt->zx(dst7.getBitSize() - src7.getBitSize(), op7);
14012 auto node8 = this->astCtxt->zx(dst8.getBitSize() - src8.getBitSize(), op8);
14015 alignSubStack_s(inst, 32);
14036 this->controlFlow_s(inst);
14044 auto stackValue = alignSubStack_s(inst, stack.getSize());
14062 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14063 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14064 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
14065 auto op4 = this->symbolicEngine->
getOperandAst(inst, src4);
14066 auto op5 = this->symbolicEngine->
getOperandAst(inst, src5);
14067 auto op6 = this->symbolicEngine->
getOperandAst(inst, src6);
14068 auto op7 = this->symbolicEngine->
getOperandAst(inst, src7);
14069 auto op8 = this->symbolicEngine->
getOperandAst(inst, src8);
14070 auto op9 = this->symbolicEngine->
getOperandAst(inst, src9);
14071 auto op10 = this->symbolicEngine->
getOperandAst(inst, src10);
14072 auto op11 = this->symbolicEngine->
getOperandAst(inst, src11);
14073 auto op12 = this->symbolicEngine->
getOperandAst(inst, src12);
14074 auto op13 = this->symbolicEngine->
getOperandAst(inst, src13);
14075 auto op14 = this->symbolicEngine->
getOperandAst(inst, src14);
14078 std::vector<triton::ast::SharedAbstractNode> eflags;
14079 eflags.reserve(22);
14081 eflags.push_back(op14);
14082 eflags.push_back(op13);
14083 eflags.push_back(op12);
14084 eflags.push_back(op11);
14085 eflags.push_back(this->astCtxt->bvfalse());
14086 eflags.push_back(this->astCtxt->bvfalse());
14087 eflags.push_back(this->astCtxt->bvfalse());
14088 eflags.push_back(op10);
14089 eflags.push_back(this->astCtxt->bvfalse());
14090 eflags.push_back(this->astCtxt->bvfalse());
14091 eflags.push_back(op9);
14092 eflags.push_back(op8);
14093 eflags.push_back(op7);
14094 eflags.push_back(op6);
14095 eflags.push_back(op5);
14096 eflags.push_back(op4);
14097 eflags.push_back(this->astCtxt->bvfalse());
14098 eflags.push_back(op3);
14099 eflags.push_back(this->astCtxt->bvfalse());
14100 eflags.push_back(op2);
14101 eflags.push_back(this->astCtxt->bvtrue());
14102 eflags.push_back(op1);
14104 auto node = this->astCtxt->zx(
14106 this->astCtxt->concat(eflags)
14114 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
14115 expr->isTainted = this->taintEngine->
taintUnion(dst, src3);
14116 expr->isTainted = this->taintEngine->
taintUnion(dst, src4);
14117 expr->isTainted = this->taintEngine->
taintUnion(dst, src5);
14118 expr->isTainted = this->taintEngine->
taintUnion(dst, src6);
14119 expr->isTainted = this->taintEngine->
taintUnion(dst, src7);
14120 expr->isTainted = this->taintEngine->
taintUnion(dst, src8);
14121 expr->isTainted = this->taintEngine->
taintUnion(dst, src9);
14122 expr->isTainted = this->taintEngine->
taintUnion(dst, src10);
14123 expr->isTainted = this->taintEngine->
taintUnion(dst, src11);
14124 expr->isTainted = this->taintEngine->
taintUnion(dst, src12);
14125 expr->isTainted = this->taintEngine->
taintUnion(dst, src13);
14126 expr->isTainted = this->taintEngine->
taintUnion(dst, src14);
14129 this->controlFlow_s(inst);
14137 auto stackValue = alignSubStack_s(inst, stack.getSize());
14155 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14156 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14157 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
14158 auto op4 = this->symbolicEngine->
getOperandAst(inst, src4);
14159 auto op5 = this->symbolicEngine->
getOperandAst(inst, src5);
14160 auto op6 = this->symbolicEngine->
getOperandAst(inst, src6);
14161 auto op7 = this->symbolicEngine->
getOperandAst(inst, src7);
14162 auto op8 = this->symbolicEngine->
getOperandAst(inst, src8);
14163 auto op9 = this->symbolicEngine->
getOperandAst(inst, src9);
14164 auto op10 = this->symbolicEngine->
getOperandAst(inst, src10);
14165 auto op11 = this->symbolicEngine->
getOperandAst(inst, src11);
14166 auto op12 = this->symbolicEngine->
getOperandAst(inst, src12);
14167 auto op13 = this->symbolicEngine->
getOperandAst(inst, src13);
14168 auto op14 = this->symbolicEngine->
getOperandAst(inst, src14);
14171 std::vector<triton::ast::SharedAbstractNode> eflags;
14172 eflags.reserve(22);
14174 eflags.push_back(op14);
14175 eflags.push_back(op13);
14176 eflags.push_back(op12);
14177 eflags.push_back(op11);
14178 eflags.push_back(this->astCtxt->bvfalse());
14179 eflags.push_back(this->astCtxt->bvfalse());
14180 eflags.push_back(this->astCtxt->bvfalse());
14181 eflags.push_back(op10);
14182 eflags.push_back(this->astCtxt->bvfalse());
14183 eflags.push_back(this->astCtxt->bvfalse());
14184 eflags.push_back(op9);
14185 eflags.push_back(op8);
14186 eflags.push_back(op7);
14187 eflags.push_back(op6);
14188 eflags.push_back(op5);
14189 eflags.push_back(op4);
14190 eflags.push_back(this->astCtxt->bvfalse());
14191 eflags.push_back(op3);
14192 eflags.push_back(this->astCtxt->bvfalse());
14193 eflags.push_back(op2);
14194 eflags.push_back(this->astCtxt->bvtrue());
14195 eflags.push_back(op1);
14197 auto node = this->astCtxt->zx(
14199 this->astCtxt->concat(eflags)
14207 expr->isTainted = this->taintEngine->
taintUnion(dst, src2);
14208 expr->isTainted = this->taintEngine->
taintUnion(dst, src3);
14209 expr->isTainted = this->taintEngine->
taintUnion(dst, src4);
14210 expr->isTainted = this->taintEngine->
taintUnion(dst, src5);
14211 expr->isTainted = this->taintEngine->
taintUnion(dst, src6);
14212 expr->isTainted = this->taintEngine->
taintUnion(dst, src7);
14213 expr->isTainted = this->taintEngine->
taintUnion(dst, src8);
14214 expr->isTainted = this->taintEngine->
taintUnion(dst, src9);
14215 expr->isTainted = this->taintEngine->
taintUnion(dst, src10);
14216 expr->isTainted = this->taintEngine->
taintUnion(dst, src11);
14217 expr->isTainted = this->taintEngine->
taintUnion(dst, src12);
14218 expr->isTainted = this->taintEngine->
taintUnion(dst, src13);
14219 expr->isTainted = this->taintEngine->
taintUnion(dst, src14);
14222 this->controlFlow_s(inst);
14235 auto node = this->astCtxt->bvxor(op1, op2);
14241 this->updateFTW(inst, expr);
14245 this->taintEngine->
setTaint(src,
false);
14247 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14250 this->controlFlow_s(inst);
14263 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcCf);
14268 op2 = this->astCtxt->bvand(
14276 op2 = this->astCtxt->bvand(
14285 op2 = this->astCtxt->bvsmod(
14286 this->astCtxt->bvand(
14298 auto node1 = this->astCtxt->bvrol(
14299 this->astCtxt->concat(op3, op1),
14300 this->astCtxt->zx(((op1->getBitvectorSize() + op3->getBitvectorSize()) - op2->getBitvectorSize()), op2)
14307 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14310 auto node2 = this->astCtxt->extract(dst.
getBitSize()-1, 0, node1);
14316 expr2->isTainted = this->taintEngine->
taintUnion(dst, src);
14317 expr2->isTainted = this->taintEngine->
taintUnion(dst, srcCf);
14320 this->cfRcl_s(inst, expr2, node1, op2bis);
14321 this->ofRol_s(inst, expr2, dst, op2bis);
14324 if (op2->evaluate() > 1) {
14325 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14329 this->controlFlow_s(inst);
14341 auto op3 = this->symbolicEngine->
getOperandAst(inst, srcCf);
14346 op2 = this->astCtxt->bvand(
14354 op2 = this->astCtxt->bvand(
14363 op2 = this->astCtxt->bvsmod(
14364 this->astCtxt->bvand(
14376 auto node1 = this->astCtxt->bvror(
14377 this->astCtxt->concat(op3, op1),
14378 this->astCtxt->zx(((op1->getBitvectorSize() + op3->getBitvectorSize()) - op2->getBitvectorSize()), op2)
14385 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14388 auto node2 = this->astCtxt->extract(dst.
getBitSize()-1, 0, node1);
14394 expr2->isTainted = this->taintEngine->
taintUnion(dst, src);
14395 expr2->isTainted = this->taintEngine->
taintUnion(dst, srcCf);
14398 this->ofRcr_s(inst, expr2, dst, op1, op2);
14399 this->cfRcr_s(inst, expr2, dst, node1, op2);
14402 if (op2->evaluate() > 1) {
14403 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14407 this->controlFlow_s(inst);
14426 expr1->isTainted = this->taintEngine->
taintUnion(dst1, src);
14427 expr2->isTainted = this->taintEngine->
taintUnion(dst2, src);
14430 this->controlFlow_s(inst);
14453 alignAddStack_s(inst, sp.getSize());
14457 auto offset = inst.
operands[0].getImmediate();
14459 alignAddStack_s(inst,
static_cast<triton::uint32>(offset.getValue()));
14479 op2 = this->astCtxt->bvsmod(
14480 this->astCtxt->bvand(
14486 op2bis = this->astCtxt->bvand(
14496 op2 = this->astCtxt->bvsmod(
14497 this->astCtxt->bvand(
14503 op2bis = this->astCtxt->bvand(
14514 auto node = this->astCtxt->bvrol(
14516 this->astCtxt->zx(op1->getBitvectorSize() - op2->getBitvectorSize(), op2)
14523 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14526 this->cfRol_s(inst, expr, dst, op2bis);
14527 this->ofRol_s(inst, expr, dst, op2bis);
14530 if (op2->evaluate() > 1) {
14531 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14535 this->controlFlow_s(inst);
14551 op2 = this->astCtxt->bvsmod(
14552 this->astCtxt->bvand(
14558 op2bis = this->astCtxt->bvand(
14568 op2 = this->astCtxt->bvsmod(
14569 this->astCtxt->bvand(
14575 op2bis = this->astCtxt->bvand(
14586 auto node = this->astCtxt->bvror(
14588 this->astCtxt->zx(op1->getBitvectorSize() - op2->getBitvectorSize(), op2)
14595 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14598 this->cfRor_s(inst, expr, dst, op2);
14599 this->ofRor_s(inst, expr, dst, op2bis);
14602 if (op2->evaluate() > 1) {
14603 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14607 this->controlFlow_s(inst);
14617 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14618 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14636 auto node = this->astCtxt->bvror(
14638 this->astCtxt->zx(op1->getBitvectorSize() - op2->getBitvectorSize(), op2)
14646 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
14649 this->controlFlow_s(inst);
14665 auto node1 = this->astCtxt->extract(7, 7, op1);
14666 auto node2 = this->astCtxt->extract(6, 6, op1);
14667 auto node3 = this->astCtxt->extract(4, 4, op1);
14668 auto node4 = this->astCtxt->extract(2, 2, op1);
14669 auto node5 = this->astCtxt->extract(0, 0, op1);
14672 auto expr1 = this->symbolicEngine->
createSymbolicExpression(inst, node1, dst1.getRegister(),
"SAHF SF operation");
14673 auto expr2 = this->symbolicEngine->
createSymbolicExpression(inst, node2, dst2.getRegister(),
"SAHF ZF operation");
14674 auto expr3 = this->symbolicEngine->
createSymbolicExpression(inst, node3, dst3.getRegister(),
"SAHF AF operation");
14675 auto expr4 = this->symbolicEngine->
createSymbolicExpression(inst, node4, dst4.getRegister(),
"SAHF PF operation");
14676 auto expr5 = this->symbolicEngine->
createSymbolicExpression(inst, node5, dst5.getRegister(),
"SAHF CF operation");
14686 this->controlFlow_s(inst);
14696 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
14704 auto node = this->astCtxt->bvashr(op1, op2);
14710 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14713 this->cfSar_s(inst, expr, dst, op1, op2);
14714 this->ofSar_s(inst, expr, dst, op2);
14715 this->pfShl_s(inst, expr, dst, op2);
14716 this->sfShl_s(inst, expr, dst, op2);
14717 this->zfShl_s(inst, expr, dst, op2);
14720 if (op2->evaluate() != 0) {
14721 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
14724 if (op2->evaluate() > 1) {
14725 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
14729 this->controlFlow_s(inst);
14739 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
14740 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
14758 auto node = this->astCtxt->bvashr(op1, op2);
14765 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
14768 this->controlFlow_s(inst);
14780 auto op3 = this->astCtxt->zx(src.
getBitSize()-1, this->symbolicEngine->getOperandAst(inst, srcCf));
14783 auto node = this->astCtxt->bvsub(op1, this->astCtxt->bvadd(op2, op3));
14789 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
14790 expr->isTainted = this->taintEngine->
taintUnion(dst, srcCf);
14793 this->af_s(inst, expr, dst, op1, op2);
14794 this->cfSub_s(inst, expr, dst, op1, op2);
14795 this->ofSub_s(inst, expr, dst, op1, op2);
14796 this->pf_s(inst, expr, dst);
14797 this->sf_s(inst, expr, dst);
14798 this->zf_s(inst, expr, dst);
14801 this->controlFlow_s(inst);
14818 this->controlFlow_s(inst);
14825 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14829 auto node1 = this->astCtxt->bvsub(op1, op2);
14830 auto node2 = this->astCtxt->ite(
14831 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14832 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::byte, index.getBitSize())),
14833 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::byte, index.getBitSize()))
14841 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14842 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
14845 this->af_s(inst, expr1, dst, op1, op2,
true);
14846 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
14847 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
14848 this->pf_s(inst, expr1, dst,
true);
14849 this->sf_s(inst, expr1, dst,
true);
14850 this->zf_s(inst, expr1, dst,
true);
14853 this->controlFlow_s(inst);
14870 this->controlFlow_s(inst);
14877 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14881 auto node1 = this->astCtxt->bvsub(op1, op2);
14882 auto node2 = this->astCtxt->ite(
14883 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14893 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14894 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
14897 this->af_s(inst, expr1, dst, op1, op2,
true);
14898 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
14899 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
14900 this->pf_s(inst, expr1, dst,
true);
14901 this->sf_s(inst, expr1, dst,
true);
14902 this->zf_s(inst, expr1, dst,
true);
14905 this->controlFlow_s(inst);
14922 this->controlFlow_s(inst);
14929 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14933 auto node1 = this->astCtxt->bvsub(op1, op2);
14934 auto node2 = this->astCtxt->ite(
14935 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14945 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14946 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
14949 this->af_s(inst, expr1, dst, op1, op2,
true);
14950 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
14951 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
14952 this->pf_s(inst, expr1, dst,
true);
14953 this->sf_s(inst, expr1, dst,
true);
14954 this->zf_s(inst, expr1, dst,
true);
14957 this->controlFlow_s(inst);
14974 this->controlFlow_s(inst);
14981 auto op3 = this->symbolicEngine->
getOperandAst(inst, index);
14985 auto node1 = this->astCtxt->bvsub(op1, op2);
14986 auto node2 = this->astCtxt->ite(
14987 this->astCtxt->equal(op4, this->astCtxt->bvfalse()),
14988 this->astCtxt->bvadd(op3, this->astCtxt->bv(
triton::size::word, index.getBitSize())),
14989 this->astCtxt->bvsub(op3, this->astCtxt->bv(
triton::size::word, index.getBitSize()))
14997 expr1->isTainted = this->taintEngine->
isTainted(dst) | this->taintEngine->
isTainted(src);
14998 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
15001 this->af_s(inst, expr1, dst, op1, op2,
true);
15002 this->cfSub_s(inst, expr1, dst, op1, op2,
true);
15003 this->ofSub_s(inst, expr1, dst, op1, op2,
true);
15004 this->pf_s(inst, expr1, dst,
true);
15005 this->sf_s(inst, expr1, dst,
true);
15006 this->zf_s(inst, expr1, dst,
true);
15009 this->controlFlow_s(inst);
15023 auto node = this->astCtxt->ite(
15024 this->astCtxt->equal(
15025 this->astCtxt->bvand(
15026 this->astCtxt->bvnot(op2),
15027 this->astCtxt->bvnot(op3)
15029 this->astCtxt->bvtrue()
15039 if (op2->evaluate().is_zero() && op3->evaluate().is_zero()) {
15045 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15048 this->controlFlow_s(inst);
15060 auto node = this->astCtxt->ite(
15061 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15070 if (op2->evaluate().is_zero()) {
15078 this->controlFlow_s(inst);
15090 auto node = this->astCtxt->ite(
15091 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15100 if (!op2->evaluate().is_zero()) {
15108 this->controlFlow_s(inst);
15122 auto node = this->astCtxt->ite(
15123 this->astCtxt->equal(this->astCtxt->bvor(op2, op3), this->astCtxt->bvtrue()),
15132 if (!op2->evaluate().is_zero() || !op3->evaluate().is_zero()) {
15138 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15141 this->controlFlow_s(inst);
15153 auto node = this->astCtxt->ite(
15154 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15163 if (!op2->evaluate().is_zero()) {
15171 this->controlFlow_s(inst);
15187 auto node = this->astCtxt->ite(
15188 this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op2, op3), op4), this->astCtxt->bvfalse()),
15197 if ((op2->evaluate().is_zero() == op3->evaluate().is_zero()) && op4->evaluate().is_zero()) {
15203 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15204 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15207 this->controlFlow_s(inst);
15221 auto node = this->astCtxt->ite(
15222 this->astCtxt->equal(op2, op3),
15231 if (op2->evaluate().is_zero() == op3->evaluate().is_zero()) {
15237 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15240 this->controlFlow_s(inst);
15254 auto node = this->astCtxt->ite(
15255 this->astCtxt->equal(this->astCtxt->bvxor(op2, op3), this->astCtxt->bvtrue()),
15264 if (op2->evaluate().is_zero() != op3->evaluate().is_zero()) {
15270 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15273 this->controlFlow_s(inst);
15289 auto node = this->astCtxt->ite(
15290 this->astCtxt->equal(this->astCtxt->bvor(this->astCtxt->bvxor(op2, op3), op4), this->astCtxt->bvtrue()),
15299 if ((op2->evaluate().is_zero() != op3->evaluate().is_zero()) || !op4->evaluate().is_zero()) {
15305 expr->isTainted = this->taintEngine->
taintUnion(dst, of);
15306 expr->isTainted = this->taintEngine->
taintUnion(dst, zf);
15309 this->controlFlow_s(inst);
15321 auto node = this->astCtxt->ite(
15322 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15331 if (op2->evaluate().is_zero()) {
15339 this->controlFlow_s(inst);
15351 auto node = this->astCtxt->ite(
15352 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15361 if (op2->evaluate().is_zero()) {
15369 this->controlFlow_s(inst);
15381 auto node = this->astCtxt->ite(
15382 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15391 if (op2->evaluate().is_zero()) {
15399 this->controlFlow_s(inst);
15411 auto node = this->astCtxt->ite(
15412 this->astCtxt->equal(op2, this->astCtxt->bvfalse()),
15421 if (op2->evaluate().is_zero()) {
15429 this->controlFlow_s(inst);
15441 auto node = this->astCtxt->ite(
15442 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15451 if (!op2->evaluate().is_zero()) {
15459 this->controlFlow_s(inst);
15471 auto node = this->astCtxt->ite(
15472 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15481 if (!op2->evaluate().is_zero()) {
15489 this->controlFlow_s(inst);
15501 auto node = this->astCtxt->ite(
15502 this->astCtxt->equal(op2, this->astCtxt->bvtrue()),
15511 if (!op2->evaluate().is_zero()) {
15519 this->controlFlow_s(inst);
15525 this->controlFlow_s(inst);
15535 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
15544 auto node = this->astCtxt->bvshl(op1, op2);
15550 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
15553 this->cfShl_s(inst, expr, dst, op1, op2);
15554 this->ofShl_s(inst, expr, dst, op1, op2);
15555 this->pfShl_s(inst, expr, dst, op2);
15556 this->sfShl_s(inst, expr, dst, op2);
15557 this->zfShl_s(inst, expr, dst, op2);
15560 if (op2->evaluate() != 0) {
15561 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15564 if (op2bis->evaluate() > dst.
getBitSize()) {
15565 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15568 if (op2->evaluate() > 1) {
15569 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15573 this->controlFlow_s(inst);
15584 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
15585 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
15591 op3 = this->astCtxt->bvsmod(
15592 this->astCtxt->bvand(
15595 this->astCtxt->bv(dst.
getBitSize(), src2.getBitSize())
15602 op3 = this->astCtxt->bvsmod(
15603 this->astCtxt->bvand(
15615 auto node = this->astCtxt->extract(
15617 this->astCtxt->bvrol(
15618 this->astCtxt->concat(op2, op1),
15619 this->astCtxt->zx(((op1->getBitvectorSize() + op2->getBitvectorSize()) - op3->getBitvectorSize()), op3)
15628 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15631 this->cfShld_s(inst, expr, dst, op1, op2, op3);
15632 this->ofShld_s(inst, expr, dst, op1, op2, op3);
15633 this->pfShl_s(inst, expr, dst, op3);
15634 this->sfShld_s(inst, expr, dst, op1, op2, op3);
15635 this->zfShl_s(inst, expr, dst, op3);
15638 if (op3->evaluate() != 0) {
15639 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15642 if (op3->evaluate() > 1) {
15643 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15646 if (op3bis->evaluate() > dst.
getBitSize()) {
15647 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15648 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15649 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15650 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
15651 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
15652 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
15658 this->controlFlow_s(inst);
15668 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
15669 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
15687 auto node = this->astCtxt->bvshl(op1, op2);
15694 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15697 this->controlFlow_s(inst);
15707 auto op2 = this->astCtxt->zx(dst.
getBitSize() - src.
getBitSize(), this->symbolicEngine->getOperandAst(inst, src));
15716 auto node = this->astCtxt->bvlshr(op1, op2);
15722 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
15725 this->cfShr_s(inst, expr, dst, op1, op2);
15726 this->ofShr_s(inst, expr, dst, op1, op2);
15727 this->pfShl_s(inst, expr, dst, op2);
15728 this->sfShl_s(inst, expr, dst, op2);
15729 this->zfShl_s(inst, expr, dst, op2);
15732 if (op2->evaluate() != 0) {
15733 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15736 if (op2bis->evaluate() > dst.
getBitSize()) {
15737 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15740 if (op2->evaluate() > 1) {
15741 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15745 this->controlFlow_s(inst);
15756 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
15757 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
15763 op3 = this->astCtxt->bvsmod(
15764 this->astCtxt->bvand(
15767 this->astCtxt->bv(dst.
getBitSize(), src2.getBitSize())
15774 op3 = this->astCtxt->bvsmod(
15775 this->astCtxt->bvand(
15787 auto node = this->astCtxt->extract(
15789 this->astCtxt->bvror(
15790 this->astCtxt->concat(op2, op1),
15791 this->astCtxt->zx(((op1->getBitvectorSize() + op2->getBitvectorSize()) - op3->getBitvectorSize()), op3)
15800 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15803 this->cfShrd_s(inst, expr, dst, op1, op2, op3);
15804 this->ofShrd_s(inst, expr, dst, op1, op2, op3);
15805 this->pfShl_s(inst, expr, dst, op3);
15806 this->sfShrd_s(inst, expr, dst, op1, op2, op3);
15807 this->zfShl_s(inst, expr, dst, op3);
15810 if (op3->evaluate() != 0) {
15811 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15814 if (op3->evaluate() > 1) {
15815 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15818 if (op3bis->evaluate() > dst.
getBitSize()) {
15819 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
15820 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_CF));
15821 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
15822 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
15823 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
15824 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_ZF));
15830 this->controlFlow_s(inst);
15840 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
15841 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
15859 auto node = this->astCtxt->bvlshr(op1, op2);
15866 expr->isTainted |= this->taintEngine->
taintUnion(dst, src2);
15869 this->controlFlow_s(inst);
15874 this->setFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Sets carry flag");
15876 this->controlFlow_s(inst);
15881 this->setFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_DF),
"Sets direction flag");
15883 this->controlFlow_s(inst);
15888 this->setFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_IF),
"Sets interrupt flag");
15890 this->controlFlow_s(inst);
15911 this->controlFlow_s(inst);
15924 this->controlFlow_s(inst);
15930 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
15935 auto node2 = this->astCtxt->ite(
15936 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
15937 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::byte, index.getBitSize())),
15938 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::byte, index.getBitSize()))
15947 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
15950 this->controlFlow_s(inst);
15963 this->controlFlow_s(inst);
15969 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
15974 auto node2 = this->astCtxt->ite(
15975 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
15986 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
15989 this->controlFlow_s(inst);
16002 this->controlFlow_s(inst);
16008 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
16013 auto node2 = this->astCtxt->ite(
16014 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
16025 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
16028 this->controlFlow_s(inst);
16041 this->controlFlow_s(inst);
16047 auto op2 = this->symbolicEngine->
getOperandAst(inst, index);
16052 auto node2 = this->astCtxt->ite(
16053 this->astCtxt->equal(op3, this->astCtxt->bvfalse()),
16054 this->astCtxt->bvadd(op2, this->astCtxt->bv(
triton::size::word, index.getBitSize())),
16055 this->astCtxt->bvsub(op2, this->astCtxt->bv(
triton::size::word, index.getBitSize()))
16064 expr2->isTainted = this->taintEngine->
taintUnion(index, index);
16067 this->controlFlow_s(inst);
16080 auto node = this->astCtxt->bvsub(op1, op2);
16086 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16089 this->af_s(inst, expr, dst, op1, op2);
16090 this->cfSub_s(inst, expr, dst, op1, op2);
16091 this->ofSub_s(inst, expr, dst, op1, op2);
16092 this->pf_s(inst, expr, dst);
16093 this->sf_s(inst, expr, dst);
16094 this->zf_s(inst, expr, dst);
16097 this->controlFlow_s(inst);
16106 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16109 auto node1 = this->astCtxt->bvadd(op1, this->astCtxt->bv(inst.
getSize(), src1.getBitSize()));
16118 if (src1.getBitSize() == 64) {
16122 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16130 this->controlFlow_s(inst);
16136 this->controlFlow_s(inst);
16145 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16146 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16149 auto node = this->astCtxt->bvand(op1, op2);
16155 expr->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
16158 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
16159 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
16160 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
16161 this->pf_s(inst, expr, src1,
true);
16162 this->sf_s(inst, expr, src1,
true);
16163 this->zf_s(inst, expr, src1,
true);
16166 this->controlFlow_s(inst);
16183 node = this->astCtxt->ite(
16184 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16185 this->astCtxt->bv(bvSize1, bvSize1),
16186 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16187 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16188 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16189 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16190 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16191 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16192 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16193 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16194 this->astCtxt->bv(0, bvSize1)
16199 node = this->astCtxt->ite(
16200 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16201 this->astCtxt->bv(bvSize1, bvSize1),
16202 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16203 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16204 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16205 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16206 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16207 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16208 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16209 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16210 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
16211 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
16212 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
16213 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
16214 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
16215 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
16216 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
16217 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
16218 this->astCtxt->bv(0, bvSize1)
16223 node = this->astCtxt->ite(
16224 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16225 this->astCtxt->bv(bvSize1, bvSize1),
16226 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16227 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16228 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16229 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16230 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16231 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16232 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16233 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16234 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
16235 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
16236 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
16237 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
16238 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
16239 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
16240 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
16241 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
16242 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
16243 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
16244 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
16245 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
16246 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
16247 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
16248 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
16249 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
16250 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
16251 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
16252 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
16253 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
16254 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
16255 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
16256 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
16257 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
16258 this->astCtxt->bv(0, bvSize1)
16259 ))))))))))))))))))))))))))))))))
16263 node = this->astCtxt->ite(
16264 this->astCtxt->equal(op1, this->astCtxt->bv(0, bvSize2)),
16265 this->astCtxt->bv(bvSize1, bvSize1),
16266 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(0, 0, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(0, bvSize1),
16267 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(1, 1, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(1, bvSize1),
16268 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(2, 2, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(2, bvSize1),
16269 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(3, 3, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(3, bvSize1),
16270 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(4, 4, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(4, bvSize1),
16271 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(5, 5, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(5, bvSize1),
16272 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(6, 6, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(6, bvSize1),
16273 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(7, 7, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(7, bvSize1),
16274 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(8, 8, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(8, bvSize1),
16275 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(9, 9, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(9, bvSize1),
16276 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(10, 10, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(10, bvSize1),
16277 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(11, 11, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(11, bvSize1),
16278 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(12, 12, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(12, bvSize1),
16279 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(13, 13, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(13, bvSize1),
16280 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(14, 14, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(14, bvSize1),
16281 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(15, 15, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(15, bvSize1),
16282 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(16, 16, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(16, bvSize1),
16283 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(17, 17, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(17, bvSize1),
16284 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(18, 18, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(18, bvSize1),
16285 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(19, 19, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(19, bvSize1),
16286 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(20, 20, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(20, bvSize1),
16287 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(21, 21, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(21, bvSize1),
16288 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(22, 22, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(22, bvSize1),
16289 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(23, 23, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(23, bvSize1),
16290 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(24, 24, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(24, bvSize1),
16291 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(25, 25, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(25, bvSize1),
16292 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(26, 26, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(26, bvSize1),
16293 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(27, 27, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(27, bvSize1),
16294 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(28, 28, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(28, bvSize1),
16295 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(29, 29, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(29, bvSize1),
16296 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(30, 30, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(30, bvSize1),
16297 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(31, 31, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(31, bvSize1),
16298 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(32, 32, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(32, bvSize1),
16299 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(33, 33, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(33, bvSize1),
16300 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(34, 34, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(34, bvSize1),
16301 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(35, 35, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(35, bvSize1),
16302 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(36, 36, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(36, bvSize1),
16303 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(37, 37, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(37, bvSize1),
16304 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(38, 38, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(38, bvSize1),
16305 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(39, 39, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(39, bvSize1),
16306 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(40, 40, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(40, bvSize1),
16307 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(41, 41, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(41, bvSize1),
16308 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(42, 42, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(42, bvSize1),
16309 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(43, 43, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(43, bvSize1),
16310 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(44, 44, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(44, bvSize1),
16311 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(45, 45, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(45, bvSize1),
16312 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(46, 46, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(46, bvSize1),
16313 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(47, 47, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(47, bvSize1),
16314 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(48, 48, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(48, bvSize1),
16315 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(49, 49, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(49, bvSize1),
16316 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(50, 50, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(50, bvSize1),
16317 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(51, 51, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(51, bvSize1),
16318 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(52, 52, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(52, bvSize1),
16319 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(53, 53, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(53, bvSize1),
16320 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(54, 54, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(54, bvSize1),
16321 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(55, 55, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(55, bvSize1),
16322 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(56, 56, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(56, bvSize1),
16323 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(57, 57, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(57, bvSize1),
16324 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(58, 58, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(58, bvSize1),
16325 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(59, 59, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(59, bvSize1),
16326 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(60, 60, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(60, bvSize1),
16327 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(61, 61, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(61, bvSize1),
16328 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(62, 62, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(62, bvSize1),
16329 this->astCtxt->ite(this->astCtxt->equal(this->astCtxt->extract(63, 63, op1), this->astCtxt->bvtrue()), this->astCtxt->bv(63, bvSize1),
16330 this->astCtxt->bv(0, bvSize1)
16331 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
16345 this->cfTzcnt_s(inst, expr, src, op1);
16346 this->zf_s(inst, expr, src);
16349 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_OF));
16350 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_SF));
16351 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_PF));
16352 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
16355 this->controlFlow_s(inst);
16368 auto node = this->astCtxt->concat(
16369 this->astCtxt->extract(127, 64, op2),
16370 this->astCtxt->extract(127, 64, op1)
16377 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16380 this->controlFlow_s(inst);
16393 std::vector<triton::ast::SharedAbstractNode> unpack;
16396 unpack.push_back(this->astCtxt->extract(127, 96, op2));
16397 unpack.push_back(this->astCtxt->extract(127, 96, op1));
16398 unpack.push_back(this->astCtxt->extract(95, 64, op2));
16399 unpack.push_back(this->astCtxt->extract(95, 64, op1));
16401 auto node = this->astCtxt->concat(unpack);
16407 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16410 this->controlFlow_s(inst);
16423 auto node = this->astCtxt->concat(
16424 this->astCtxt->extract(63, 0, op2),
16425 this->astCtxt->extract(63, 0, op1)
16432 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16435 this->controlFlow_s(inst);
16448 std::vector<triton::ast::SharedAbstractNode> unpack;
16451 unpack.push_back(this->astCtxt->extract(63, 32, op2));
16452 unpack.push_back(this->astCtxt->extract(63, 32, op1));
16453 unpack.push_back(this->astCtxt->extract(31, 0, op2));
16454 unpack.push_back(this->astCtxt->extract(31, 0, op1));
16456 auto node = this->astCtxt->concat(unpack);
16462 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
16465 this->controlFlow_s(inst);
16477 auto node = this->astCtxt->bvtrue();
16486 this->controlFlow_s(inst);
16498 auto node = this->astCtxt->bvtrue();
16507 this->controlFlow_s(inst);
16517 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16518 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16522 if (op2->evaluate() & 0b00000001) {
16523 node = this->astCtxt->extract(255, 128, op1);
16525 node = this->astCtxt->extract(127, 0, op1);
16535 this->controlFlow_s(inst);
16556 this->controlFlow_s(inst);
16565 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16574 this->controlFlow_s(inst);
16583 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16592 this->controlFlow_s(inst);
16601 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16610 this->controlFlow_s(inst);
16631 this->controlFlow_s(inst);
16671 else if (inst.
operands.size() == 3) {
16678 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
16679 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
16682 auto node = this->astCtxt->concat(
16695 this->controlFlow_s(inst);
16704 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16713 this->controlFlow_s(inst);
16722 auto node = this->symbolicEngine->
getOperandAst(inst, src);
16731 this->controlFlow_s(inst);
16741 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16742 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16745 std::vector<triton::ast::SharedAbstractNode> pck;
16748 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
16754 auto signed_word = this->astCtxt->extract(high, low, ops[idx]);
16755 pck.push_back(this->astCtxt->ite(
16758 this->astCtxt->ite(
16767 auto node = this->astCtxt->concat(pck);
16776 this->controlFlow_s(inst);
16786 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16787 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16790 std::vector<triton::ast::SharedAbstractNode> pck;
16793 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
16799 auto signed_dword = this->astCtxt->extract(high, low, ops[idx]);
16800 pck.push_back(this->astCtxt->ite(
16803 this->astCtxt->ite(
16812 auto node = this->astCtxt->concat(pck);
16821 this->controlFlow_s(inst);
16831 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16832 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16835 std::vector<triton::ast::SharedAbstractNode> pck;
16838 std::vector<triton::ast::SharedAbstractNode> ops{op2, op1};
16844 auto signed_word = this->astCtxt->extract(high, low, ops[idx]);
16845 pck.push_back(this->astCtxt->ite(
16848 this->astCtxt->ite(
16857 auto node = this->astCtxt->concat(pck);
16866 this->controlFlow_s(inst);
16876 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16877 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16880 std::vector<triton::ast::SharedAbstractNode> pck;
16886 pck.push_back(this->astCtxt->bvadd(this->astCtxt->extract(high, low, op1), this->astCtxt->extract(high, low, op2)));
16888 auto node = this->astCtxt->concat(pck);
16897 this->controlFlow_s(inst);
16907 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16908 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16911 std::vector<triton::ast::SharedAbstractNode> pck;
16917 pck.push_back(this->astCtxt->bvadd(this->astCtxt->extract(high, low, op1), this->astCtxt->extract(high, low, op2)));
16919 auto node = this->astCtxt->concat(pck);
16928 this->controlFlow_s(inst);
16938 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
16939 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
16942 std::vector<triton::ast::SharedAbstractNode> pck;
16948 pck.push_back(this->astCtxt->bvadd(this->astCtxt->extract(high, low, op1), this->astCtxt->extract(high, low, op2)));
16950 auto node = this->astCtxt->concat(pck);
16959 this->controlFlow_s(inst);
16969 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
16970 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
16973 auto node = this->astCtxt->bvand(op2, op3);
16982 this->controlFlow_s(inst);
16992 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
16993 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
16996 auto node = this->astCtxt->bvand(this->astCtxt->bvnot(op2), op3);
17005 this->controlFlow_s(inst);
17016 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17017 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17018 auto op3 = this->symbolicEngine->
getOperandAst(inst, src3);
17021 std::deque<triton::arch::OperandWrapper> taint;
17025 taint.push_back(src1);
17026 return this->astCtxt->extract(127, 0, op1);
17028 taint.push_back(src1);
17029 return this->astCtxt->extract(255, 128, op1);
17031 taint.push_back(src2);
17032 return this->astCtxt->extract(127, 0, op2);
17035 taint.push_back(src2);
17036 return this->astCtxt->extract(255, 128, op2);
17041 auto high = permute((ctrl >> 4) & 0b00000011);
17042 auto low = permute(ctrl & 0b00000011);
17044 if (ctrl & 0b00001000) {
17045 low = this->astCtxt->bv(0, 128);
17049 if (ctrl & 0b10000000) {
17050 high = this->astCtxt->bv(0, 128);
17054 auto node = this->astCtxt->concat(high, low);
17060 if (taint.empty()) {
17061 this->taintEngine->
setTaint(dst,
false);
17062 }
else if (taint.size() == 1) {
17069 this->controlFlow_s(inst);
17079 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17080 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17083 std::vector<triton::ast::SharedAbstractNode> pck;
17088 auto shift = this->astCtxt->bvmul(
17090 this->astCtxt->zx(src1.getBitSize() - 2,
17091 this->astCtxt->extract(high, high - 1, op2)));
17092 pck.push_back(this->astCtxt->extract(
triton::bitsize::qword - 1, 0, this->astCtxt->bvlshr(op1, shift)));
17095 auto node = this->astCtxt->concat(pck);
17101 expr->isTainted = this->taintEngine->
taintUnion(dst, src1);
17104 this->controlFlow_s(inst);
17115 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17116 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17118 auto node = this->astCtxt->extract(7, 0,
17119 this->astCtxt->bvlshr(
17121 this->astCtxt->bv(((op3->evaluate() & 0x0f) * 8), op2->getBitvectorSize())
17132 this->controlFlow_s(inst);
17143 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17144 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17147 this->astCtxt->bvlshr(
17160 this->controlFlow_s(inst);
17171 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17172 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17175 this->astCtxt->bvlshr(
17188 this->controlFlow_s(inst);
17213 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17214 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17217 this->astCtxt->bvlshr(
17230 this->controlFlow_s(inst);
17243 std::vector<triton::ast::SharedAbstractNode> exprs(dst.
getSize(), src_node);
17244 auto node = this->astCtxt->concat(exprs);
17253 this->controlFlow_s(inst);
17263 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17264 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17267 std::vector<triton::ast::SharedAbstractNode> pck;
17270 for (
triton::uint32 index = 0; index < src1.getSize(); index++) {
17273 pck.push_back(this->astCtxt->ite(
17274 this->astCtxt->equal(
17275 this->astCtxt->extract(high, low, op1),
17276 this->astCtxt->extract(high, low, op2)),
17282 auto node = this->astCtxt->concat(pck);
17291 this->controlFlow_s(inst);
17301 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17302 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17305 std::vector<triton::ast::SharedAbstractNode> pck;
17311 pck.push_back(this->astCtxt->ite(
17312 this->astCtxt->equal(
17313 this->astCtxt->extract(high, low, op1),
17314 this->astCtxt->extract(high, low, op2)),
17320 auto node = this->astCtxt->concat(pck);
17329 this->controlFlow_s(inst);
17339 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17340 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17343 std::vector<triton::ast::SharedAbstractNode> pck;
17349 pck.push_back(this->astCtxt->ite(
17350 this->astCtxt->equal(
17351 this->astCtxt->extract(high, low, op1),
17352 this->astCtxt->extract(high, low, op2)),
17358 auto node = this->astCtxt->concat(pck);
17367 this->controlFlow_s(inst);
17377 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17378 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17381 std::vector<triton::ast::SharedAbstractNode> pck;
17387 pck.push_back(this->astCtxt->ite(
17388 this->astCtxt->equal(
17389 this->astCtxt->extract(high, low, op1),
17390 this->astCtxt->extract(high, low, op2)),
17396 auto node = this->astCtxt->concat(pck);
17405 this->controlFlow_s(inst);
17415 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17416 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17419 std::vector<triton::ast::SharedAbstractNode> pck;
17425 pck.push_back(this->astCtxt->ite(
17426 this->astCtxt->bvsgt(
17427 this->astCtxt->extract(high, low, op1),
17428 this->astCtxt->extract(high, low, op2)),
17434 auto node = this->astCtxt->concat(pck);
17443 this->controlFlow_s(inst);
17453 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17454 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17457 std::vector<triton::ast::SharedAbstractNode> pck;
17463 pck.push_back(this->astCtxt->ite(
17464 this->astCtxt->bvsgt(
17465 this->astCtxt->extract(high, low, op1),
17466 this->astCtxt->extract(high, low, op2)),
17472 auto node = this->astCtxt->concat(pck);
17481 this->controlFlow_s(inst);
17491 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17492 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17495 std::vector<triton::ast::SharedAbstractNode> pck;
17501 pck.push_back(this->astCtxt->ite(
17502 this->astCtxt->bvsgt(
17503 this->astCtxt->extract(high, low, op1),
17504 this->astCtxt->extract(high, low, op2)),
17510 auto node = this->astCtxt->concat(pck);
17519 this->controlFlow_s(inst);
17529 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17530 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17533 std::vector<triton::ast::SharedAbstractNode> pck;
17539 auto node1 = this->astCtxt->bvmul(
17545 auto node2 = this->astCtxt->bvmul(
17549 pck.push_back(this->astCtxt->bvadd(node1, node2));
17552 auto node = this->astCtxt->concat(pck);
17561 this->controlFlow_s(inst);
17573 std::vector<triton::ast::SharedAbstractNode> mskb;
17578 mskb.push_back(this->astCtxt->extract(255, 255, op2));
17579 mskb.push_back(this->astCtxt->extract(247, 247, op2));
17580 mskb.push_back(this->astCtxt->extract(239, 239, op2));
17581 mskb.push_back(this->astCtxt->extract(231, 231, op2));
17582 mskb.push_back(this->astCtxt->extract(223, 223, op2));
17583 mskb.push_back(this->astCtxt->extract(215, 215, op2));
17584 mskb.push_back(this->astCtxt->extract(207, 207, op2));
17585 mskb.push_back(this->astCtxt->extract(199, 199, op2));
17586 mskb.push_back(this->astCtxt->extract(191, 191, op2));
17587 mskb.push_back(this->astCtxt->extract(183, 183, op2));
17588 mskb.push_back(this->astCtxt->extract(175, 175, op2));
17589 mskb.push_back(this->astCtxt->extract(167, 167, op2));
17590 mskb.push_back(this->astCtxt->extract(159, 159, op2));
17591 mskb.push_back(this->astCtxt->extract(151, 151, op2));
17592 mskb.push_back(this->astCtxt->extract(143, 143, op2));
17593 mskb.push_back(this->astCtxt->extract(135, 135, op2));
17596 mskb.push_back(this->astCtxt->extract(127, 127, op2));
17597 mskb.push_back(this->astCtxt->extract(119, 119, op2));
17598 mskb.push_back(this->astCtxt->extract(111, 111, op2));
17599 mskb.push_back(this->astCtxt->extract(103, 103, op2));
17600 mskb.push_back(this->astCtxt->extract(95 , 95 , op2));
17601 mskb.push_back(this->astCtxt->extract(87 , 87 , op2));
17602 mskb.push_back(this->astCtxt->extract(79 , 79 , op2));
17603 mskb.push_back(this->astCtxt->extract(71 , 71 , op2));
17604 mskb.push_back(this->astCtxt->extract(63 , 63 , op2));
17605 mskb.push_back(this->astCtxt->extract(55 , 55 , op2));
17606 mskb.push_back(this->astCtxt->extract(47 , 47 , op2));
17607 mskb.push_back(this->astCtxt->extract(39 , 39 , op2));
17608 mskb.push_back(this->astCtxt->extract(31 , 31 , op2));
17609 mskb.push_back(this->astCtxt->extract(23 , 23 , op2));
17610 mskb.push_back(this->astCtxt->extract(15 , 15 , op2));
17611 mskb.push_back(this->astCtxt->extract(7 , 7 , op2));
17618 auto node = this->astCtxt->zx(
17620 this->astCtxt->concat(mskb)
17630 this->controlFlow_s(inst);
17640 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17641 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17644 std::vector<triton::ast::SharedAbstractNode> pck;
17650 pck.push_back(this->astCtxt->ite(
17651 this->astCtxt->bvuge(
17652 this->astCtxt->extract(high, low, op1),
17653 this->astCtxt->extract(high, low, op2)),
17654 this->astCtxt->extract(high, low, op2),
17655 this->astCtxt->extract(high, low, op1))
17659 auto node = this->astCtxt->concat(pck);
17668 this->controlFlow_s(inst);
17678 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17679 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17682 std::vector<triton::ast::SharedAbstractNode> pck;
17691 pck.push_back(node);
17693 auto node = this->astCtxt->concat(pck);
17702 this->controlFlow_s(inst);
17712 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17713 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17716 std::vector<triton::ast::SharedAbstractNode> pck;
17725 pck.push_back(node);
17727 auto node = this->astCtxt->concat(pck);
17736 this->controlFlow_s(inst);
17746 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
17747 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
17750 auto node = this->astCtxt->bvor(op2, op3);
17759 this->controlFlow_s(inst);
17774 std::vector<triton::ast::SharedAbstractNode> pack;
17782 this->astCtxt->extract(31, 0,
17783 this->astCtxt->bvlshr(
17785 this->astCtxt->bvmul(
17786 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(7, 6, op3)),
17787 this->astCtxt->bv(32, dstSize)
17793 this->astCtxt->extract(31, 0,
17794 this->astCtxt->bvlshr(
17796 this->astCtxt->bvmul(
17797 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(5, 4, op3)),
17798 this->astCtxt->bv(32, dstSize)
17804 this->astCtxt->extract(31, 0,
17805 this->astCtxt->bvlshr(
17807 this->astCtxt->bvmul(
17808 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(3, 2, op3)),
17809 this->astCtxt->bv(32, dstSize)
17815 this->astCtxt->extract(31, 0,
17816 this->astCtxt->bvlshr(
17818 this->astCtxt->bvmul(
17819 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(1, 0, op3)),
17820 this->astCtxt->bv(32, dstSize)
17829 this->astCtxt->extract(31, 0,
17830 this->astCtxt->bvlshr(
17832 this->astCtxt->bvmul(
17833 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(7, 6, op3)),
17834 this->astCtxt->bv(32, dstSize)
17840 this->astCtxt->extract(31, 0,
17841 this->astCtxt->bvlshr(
17843 this->astCtxt->bvmul(
17844 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(5, 4, op3)),
17845 this->astCtxt->bv(32, dstSize)
17851 this->astCtxt->extract(31, 0,
17852 this->astCtxt->bvlshr(
17854 this->astCtxt->bvmul(
17855 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(3, 2, op3)),
17856 this->astCtxt->bv(32, dstSize)
17862 this->astCtxt->extract(31, 0,
17863 this->astCtxt->bvlshr(
17865 this->astCtxt->bvmul(
17866 this->astCtxt->zx(dstSize-2, this->astCtxt->extract(1, 0, op3)),
17867 this->astCtxt->bv(32, dstSize)
17878 auto node = this->astCtxt->concat(pack);
17887 this->controlFlow_s(inst);
17897 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17898 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17901 std::vector<triton::ast::SharedAbstractNode> pck;
17907 auto val = this->astCtxt->extract(high, low, op2);
17908 pck.push_back(this->astCtxt->ite(
17910 this->astCtxt->extract(high, low, op1),
17911 this->astCtxt->ite(
17913 this->astCtxt->bvneg(this->astCtxt->extract(high, low, op1)),
17918 auto node = this->astCtxt->concat(pck);
17924 this->taintEngine->
setTaint(dst,
false);
17927 this->controlFlow_s(inst);
17937 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17938 auto op2 = this->astCtxt->zx(
triton::bitsize::dqword - src2.getBitSize(), this->symbolicEngine->getOperandAst(inst, src2));
17943 std::vector<triton::ast::SharedAbstractNode> pck;
17949 pck.push_back(this->astCtxt->bvshl(
17950 this->astCtxt->extract(high, low, op1),
17951 this->astCtxt->bvmul(
17952 this->astCtxt->ite(
17962 node = pck.size() > 1 ? this->astCtxt->concat(pck) : pck[0];
17971 this->controlFlow_s(inst);
17981 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
17982 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
17985 std::vector<triton::ast::SharedAbstractNode> pck;
17988 auto shift = this->astCtxt->ite(
18004 pck.push_back(this->astCtxt->bvshl(this->astCtxt->extract(high, low, op1), shift));
18006 auto node = this->astCtxt->concat(pck);
18015 this->controlFlow_s(inst);
18025 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18026 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18029 std::vector<triton::ast::SharedAbstractNode> pck;
18032 auto shift = this->astCtxt->ite(
18048 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
18050 auto node = this->astCtxt->concat(pck);
18059 this->controlFlow_s(inst);
18069 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18070 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18073 std::vector<triton::ast::SharedAbstractNode> pck;
18076 auto shift = this->astCtxt->ite(
18092 pck.push_back(this->astCtxt->bvashr(this->astCtxt->extract(high, low, op1), shift));
18094 auto node = this->astCtxt->concat(pck);
18103 this->controlFlow_s(inst);
18113 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18114 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18117 std::vector<triton::ast::SharedAbstractNode> pck;
18120 auto shift = this->astCtxt->ite(
18137 pck.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(high, low, op1), shift));
18139 auto node = pck.size() > 1 ? this->astCtxt->concat(pck) : pck[0];
18148 this->controlFlow_s(inst);
18158 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18159 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18162 std::vector<triton::ast::SharedAbstractNode> pck;
18165 auto shift = this->astCtxt->ite(
18181 pck.push_back(this->astCtxt->bvlshr(this->astCtxt->extract(high, low, op1), shift));
18183 auto node = this->astCtxt->concat(pck);
18192 this->controlFlow_s(inst);
18202 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18203 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18206 std::vector<triton::ast::SharedAbstractNode> pck;
18212 pck.push_back(this->astCtxt->bvsub(
18213 this->astCtxt->extract(high, low, op1),
18214 this->astCtxt->extract(high, low, op2))
18218 auto node = this->astCtxt->concat(pck);
18227 this->controlFlow_s(inst);
18237 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18238 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18241 std::vector<triton::ast::SharedAbstractNode> pck;
18247 pck.push_back(this->astCtxt->bvsub(
18248 this->astCtxt->extract(high, low, op1),
18249 this->astCtxt->extract(high, low, op2))
18253 auto node = this->astCtxt->concat(pck);
18262 this->controlFlow_s(inst);
18272 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18273 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18276 std::vector<triton::ast::SharedAbstractNode> pck;
18282 pck.push_back(this->astCtxt->bvsub(
18283 this->astCtxt->extract(high, low, op1),
18284 this->astCtxt->extract(high, low, op2))
18288 auto node = this->astCtxt->concat(pck);
18297 this->controlFlow_s(inst);
18307 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18308 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18311 std::vector<triton::ast::SharedAbstractNode> pck;
18317 pck.push_back(this->astCtxt->bvsub(
18318 this->astCtxt->extract(high, low, op1),
18319 this->astCtxt->extract(high, low, op2))
18323 auto node = this->astCtxt->concat(pck);
18332 this->controlFlow_s(inst);
18341 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18342 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18345 auto node1 = this->astCtxt->bvand(op1, op2);
18346 auto node2 = this->astCtxt->bvand(op1, this->astCtxt->bvnot(op2));
18353 expr1->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
18354 expr2->isTainted = this->taintEngine->
isTainted(src1) | this->taintEngine->
isTainted(src2);
18357 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_AF),
"Clears adjust flag");
18358 this->cfPtest_s(inst, expr2, src1,
true);
18359 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
18360 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_PF),
"Clears parity flag");
18361 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_SF),
"Clears sign flag");
18362 this->zf_s(inst, expr1, src1,
true);
18365 this->controlFlow_s(inst);
18375 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18376 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18379 std::vector<triton::ast::SharedAbstractNode> unpack;
18380 unpack.reserve(dst.
getSize());
18388 unpack.push_back(this->astCtxt->extract(high, low, op2));
18389 unpack.push_back(this->astCtxt->extract(high, low, op1));
18393 auto node = this->astCtxt->concat(unpack);
18402 this->controlFlow_s(inst);
18412 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18413 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18416 std::vector<triton::ast::SharedAbstractNode> unpack;
18425 unpack.push_back(this->astCtxt->extract(high, low, op2));
18426 unpack.push_back(this->astCtxt->extract(high, low, op1));
18430 auto node = this->astCtxt->concat(unpack);
18439 this->controlFlow_s(inst);
18449 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18450 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18453 std::vector<triton::ast::SharedAbstractNode> unpack;
18462 unpack.push_back(this->astCtxt->extract(high, low, op2));
18463 unpack.push_back(this->astCtxt->extract(high, low, op1));
18467 auto node = this->astCtxt->concat(unpack);
18476 this->controlFlow_s(inst);
18486 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18487 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18490 std::vector<triton::ast::SharedAbstractNode> unpack;
18499 unpack.push_back(this->astCtxt->extract(high, low, op2));
18500 unpack.push_back(this->astCtxt->extract(high, low, op1));
18504 auto node = this->astCtxt->concat(unpack);
18513 this->controlFlow_s(inst);
18523 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18524 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18527 std::vector<triton::ast::SharedAbstractNode> unpack;
18528 unpack.reserve(dst.
getSize());
18536 unpack.push_back(this->astCtxt->extract(high, low, op2));
18537 unpack.push_back(this->astCtxt->extract(high, low, op1));
18541 auto node = this->astCtxt->concat(unpack);
18550 this->controlFlow_s(inst);
18560 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18561 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18564 std::vector<triton::ast::SharedAbstractNode> unpack;
18573 unpack.push_back(this->astCtxt->extract(high, low, op2));
18574 unpack.push_back(this->astCtxt->extract(high, low, op1));
18578 auto node = this->astCtxt->concat(unpack);
18587 this->controlFlow_s(inst);
18597 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18598 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18601 std::vector<triton::ast::SharedAbstractNode> unpack;
18610 unpack.push_back(this->astCtxt->extract(high, low, op2));
18611 unpack.push_back(this->astCtxt->extract(high, low, op1));
18615 auto node = this->astCtxt->concat(unpack);
18624 this->controlFlow_s(inst);
18634 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18635 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18638 std::vector<triton::ast::SharedAbstractNode> unpack;
18647 unpack.push_back(this->astCtxt->extract(high, low, op2));
18648 unpack.push_back(this->astCtxt->extract(high, low, op1));
18652 auto node = this->astCtxt->concat(unpack);
18661 this->controlFlow_s(inst);
18671 auto op2 = this->symbolicEngine->
getOperandAst(inst, src1);
18672 auto op3 = this->symbolicEngine->
getOperandAst(inst, src2);
18675 auto node = this->astCtxt->bvxor(op2, op3);
18684 this->controlFlow_s(inst);
18694 auto op1 = this->symbolicEngine->
getOperandAst(inst, src1);
18695 auto op2 = this->symbolicEngine->
getOperandAst(inst, src2);
18698 auto node = this->astCtxt->bvxor(op1, op2);
18707 this->controlFlow_s(inst);
18713 this->controlFlow_s(inst);
18719 this->controlFlow_s(inst);
18726 bool dstT = this->taintEngine->
isTainted(dst);
18733 auto node = this->astCtxt->bvadd(op1, op2);
18740 expr2->isTainted = this->taintEngine->
taintUnion(dst, src);
18741 expr1->isTainted = this->taintEngine->
setTaint(src, dstT);
18744 this->af_s(inst, expr2, dst, op1, op2);
18745 this->cfAdd_s(inst, expr2, dst, op1, op2);
18746 this->ofAdd_s(inst, expr2, dst, op1, op2);
18747 this->pf_s(inst, expr2, dst);
18748 this->sf_s(inst, expr2, dst);
18749 this->zf_s(inst, expr2, dst);
18752 this->controlFlow_s(inst);
18759 bool dstT = this->taintEngine->
isTainted(dst);
18760 bool srcT = this->taintEngine->
isTainted(src);
18775 expr1->isTainted = this->taintEngine->
setTaint(dst, srcT);
18776 expr2->isTainted = this->taintEngine->
setTaint(src, dstT);
18779 this->controlFlow_s(inst);
18792 auto node = this->astCtxt->bvxor(op1, op2);
18800 this->taintEngine->
setTaint(src,
false);
18802 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
18805 this->undefined_s(inst, this->architecture->
getRegister(ID_REG_X86_AF));
18806 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_CF),
"Clears carry flag");
18807 this->clearFlag_s(inst, this->architecture->
getRegister(ID_REG_X86_OF),
"Clears overflow flag");
18808 this->pf_s(inst, expr, dst);
18809 this->sf_s(inst, expr, dst);
18810 this->zf_s(inst, expr, dst);
18813 this->controlFlow_s(inst);
18826 auto node = this->astCtxt->bvxor(op1, op2);
18832 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
18835 this->controlFlow_s(inst);
18848 auto node = this->astCtxt->bvxor(op1, op2);
18854 expr->isTainted = this->taintEngine->
taintUnion(dst, src);
18857 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.
math::wide_integer::uint128_t uint128
unsigned 128-bits
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