468 static void TritonContext_dealloc(PyObject* self) {
469 if (((TritonContext_Object*)self)->ref ==
false)
471 Py_XDECREF(((TritonContext_Object*)self)->regAttr);
472 Py_TYPE(self)->tp_free((PyObject*)self);
476 static void TritonContext_fillRegistersAttribute(PyObject* self) {
481 for (
auto& reg : regs)
484 Py_XDECREF(((TritonContext_Object*)(self))->regAttr);
489 static PyObject* TritonContext_addCallback(PyObject* self, PyObject* args) {
490 PyObject* function =
nullptr;
491 PyObject* mode =
nullptr;
492 PyObject* cb =
nullptr;
493 PyObject* cb_self =
nullptr;
496 if (PyArg_ParseTuple(args,
"|OO", &mode, &function) ==
false) {
497 return PyErr_Format(PyExc_TypeError,
"TritonContext::addCallback(): Invalid number of arguments");
500 if (mode ==
nullptr || (!PyLong_Check(mode) && !PyInt_Check(mode)))
501 return PyErr_Format(PyExc_TypeError,
"TritonContext::addCallback(): Expects a CALLBACK as first argument.");
503 if (function ==
nullptr || !PyCallable_Check(function))
504 return PyErr_Format(PyExc_TypeError,
"TritonContext::addCallback(): Expects a function as second argument.");
506 if (PyMethod_Check(function)) {
507 cb_self = PyMethod_GET_SELF(function);
508 cb = PyMethod_GET_FUNCTION(function);
522 PyObject* args =
nullptr;
527 PyTuple_SetItem(args, 0, cb_self);
539 PyObject* ret = PyObject_CallObject(cb, args);
545 if (ret ==
nullptr) {
555 PyObject* args =
nullptr;
560 PyTuple_SetItem(args, 0, cb_self);
572 PyObject* ret = PyObject_CallObject(cb, args);
578 if (ret ==
nullptr) {
588 PyObject* args =
nullptr;
593 PyTuple_SetItem(args, 0, cb_self);
607 PyObject* ret = PyObject_CallObject(cb, args);
613 if (ret ==
nullptr) {
623 PyObject* args =
nullptr;
628 PyTuple_SetItem(args, 0, cb_self);
642 PyObject* ret = PyObject_CallObject(cb, args);
648 if (ret ==
nullptr) {
658 PyObject* args =
nullptr;
663 PyTuple_SetItem(args, 0, cb_self);
675 PyObject* ret = PyObject_CallObject(cb, args);
681 if (ret ==
nullptr) {
697 return PyErr_Format(PyExc_TypeError,
"Callbacks::addCallback(): Invalid kind of callback.");
704 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
712 static PyObject* TritonContext_assignSymbolicExpressionToMemory(PyObject* self, PyObject* args) {
713 PyObject* se =
nullptr;
714 PyObject* mem =
nullptr;
717 if (PyArg_ParseTuple(args,
"|OO", &se, &mem) ==
false) {
718 return PyErr_Format(PyExc_TypeError,
"TritonContext::assignSymbolicExpressionToMemory(): Invalid number of arguments");
722 return PyErr_Format(PyExc_TypeError,
"TritonContext::assignSymbolicExpressionToMemory(): Expects a SymbolicExpression as first argument.");
725 return PyErr_Format(PyExc_TypeError,
"TritonContext::assignSymbolicExpressionToMemory(): Expects a MemoryAccess as second argument.");
737 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
745 static PyObject* TritonContext_assignSymbolicExpressionToRegister(PyObject* self, PyObject* args) {
746 PyObject* se =
nullptr;
747 PyObject* reg =
nullptr;
750 if (PyArg_ParseTuple(args,
"|OO", &se, ®) ==
false) {
751 return PyErr_Format(PyExc_TypeError,
"TritonContext::assignSymbolicExpressionToRegister(): Invalid number of arguments");
755 return PyErr_Format(PyExc_TypeError,
"TritonContext::assignSymbolicExpressionToRegister(): Expects a SymbolicExpression as first argument.");
758 return PyErr_Format(PyExc_TypeError,
"TritonContext::assignSymbolicExpressionToRegister(): Expects a Register as second argument.");
770 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
778 static PyObject* TritonContext_buildSemantics(PyObject* self, PyObject* inst) {
780 return PyErr_Format(PyExc_TypeError,
"TritonContext::buildSemantics(): Expects an Instruction as argument.");
789 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
794 static PyObject* TritonContext_clearCallbacks(PyObject* self, PyObject* noarg) {
802 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
810 static PyObject* TritonContext_clearModes(PyObject* self, PyObject* noarg) {
818 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
826 static PyObject* TritonContext_clearConcreteMemoryValue(PyObject* self, PyObject* args) {
827 PyObject* baseAddr =
nullptr;
828 PyObject* size =
nullptr;
831 if (PyArg_ParseTuple(args,
"|OO", &baseAddr, &size) ==
false) {
832 return PyErr_Format(PyExc_TypeError,
"TritonContext::clearConcreteMemoryValue(): Invalid number of arguments");
839 else if (baseAddr && (PyLong_Check(baseAddr) || PyInt_Check(baseAddr))) {
840 if (size && (PyLong_Check(size) || PyInt_Check(size))) {
844 return PyErr_Format(PyExc_TypeError,
"TritonContext::clearConcreteMemoryValue(): Expects a size (integer) as second argument.");
848 return PyErr_Format(PyExc_TypeError,
"TritonContext::clearConcreteMemoryValue(): Expects a base address (integer) as arguments or a memory cells.");
855 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
863 static PyObject* TritonContext_clearPathConstraints(PyObject* self, PyObject* noarg) {
868 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
876 static PyObject* TritonContext_concretizeAllMemory(PyObject* self, PyObject* noarg) {
884 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
892 static PyObject* TritonContext_concretizeAllRegister(PyObject* self, PyObject* noarg) {
900 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
908 static PyObject* TritonContext_concretizeMemory(PyObject* self, PyObject* mem) {
910 if (PyLong_Check(mem) || PyInt_Check(mem)) {
918 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
931 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
937 return PyErr_Format(PyExc_TypeError,
"TritonContext::concretizeMemory(): Expects an integer or MemoryAccess as argument.");
944 static PyObject* TritonContext_concretizeRegister(PyObject* self, PyObject* reg) {
946 return PyErr_Format(PyExc_TypeError,
"TritonContext::concretizeRegister(): Expects a Register as argument.");
955 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
963 static PyObject* TritonContext_createSymbolicMemoryExpression(PyObject* self, PyObject* args) {
964 PyObject* inst =
nullptr;
965 PyObject* node =
nullptr;
966 PyObject* mem =
nullptr;
967 PyObject* comment =
nullptr;
968 std::string ccomment =
"";
971 if (PyArg_ParseTuple(args,
"|OOOO", &inst, &node, &mem, &comment) ==
false) {
972 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicMemoryExpression(): Invalid number of arguments");
976 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicMemoryExpression(): Expects an Instruction as first argument.");
979 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicMemoryExpression(): Expects a AstNode as second argument.");
982 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicMemoryExpression(): Expects a MemoryAccess as third argument.");
984 if (comment !=
nullptr && !PyStr_Check(comment))
985 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicMemoryExpression(): Expects a sting as fourth argument.");
987 if (comment !=
nullptr)
988 ccomment = PyStr_AsString(comment);
1001 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1006 static PyObject* TritonContext_createSymbolicRegisterExpression(PyObject* self, PyObject* args) {
1007 PyObject* inst =
nullptr;
1008 PyObject* node =
nullptr;
1009 PyObject* reg =
nullptr;
1010 PyObject* comment =
nullptr;
1011 std::string ccomment =
"";
1014 if (PyArg_ParseTuple(args,
"|OOOO", &inst, &node, ®, &comment) ==
false) {
1015 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicRegisterExpression(): Invalid number of arguments");
1019 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicRegisterExpression(): Expects an Instruction as first argument.");
1022 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicRegisterExpression(): Expects a AstNode as second argument.");
1025 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicRegisterExpression(): Expects a Register as third argument.");
1027 if (comment !=
nullptr && !PyStr_Check(comment))
1028 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicRegisterExpression(): Expects a sting as fourth argument.");
1030 if (comment !=
nullptr)
1031 ccomment = PyStr_AsString(comment);
1044 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1049 static PyObject* TritonContext_createSymbolicVolatileExpression(PyObject* self, PyObject* args) {
1050 PyObject* inst =
nullptr;
1051 PyObject* node =
nullptr;
1052 PyObject* comment =
nullptr;
1053 std::string ccomment =
"";
1056 if (PyArg_ParseTuple(args,
"|OOO", &inst, &node, &comment) ==
false) {
1057 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicVolatileExpression(): Invalid number of arguments");
1061 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicVolatileExpression(): Expects an Instruction as first argument.");
1064 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicVolatileExpression(): Expects a AstNode as second argument.");
1066 if (comment !=
nullptr && !PyStr_Check(comment))
1067 return PyErr_Format(PyExc_TypeError,
"TritonContext::createSymbolicVolatileExpression(): Expects a sting as third argument.");
1069 if (comment !=
nullptr)
1070 ccomment = PyStr_AsString(comment);
1082 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1087 static PyObject* TritonContext_disassembly(PyObject* self, PyObject* args) {
1088 PyObject* arg0 =
nullptr;
1089 PyObject* arg1 =
nullptr;
1090 PyObject* ret =
nullptr;
1094 if (PyArg_ParseTuple(args,
"|OO", &arg0, &arg1) ==
false) {
1095 return PyErr_Format(PyExc_TypeError,
"TritonContext::disassembly(): Invalid number of arguments.");
1106 if (arg1 !=
nullptr && (PyLong_Check(arg1) || PyInt_Check(arg1))) {
1113 if ((arg0 !=
nullptr && (PyLong_Check(arg0) || PyInt_Check(arg0))) &&
1114 (arg1 ==
nullptr || PyLong_Check(arg1) || PyInt_Check(arg1))) {
1116 std::vector<triton::arch::Instruction> insts;
1120 for (
auto& inst : insts)
1129 return PyErr_Format(PyExc_TypeError,
"TritonContext::disassembly(): Expects an Instruction or two integers as arguments.");
1136 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1141 static PyObject* TritonContext_evaluateAstViaSolver(PyObject* self, PyObject* node) {
1143 return PyErr_Format(PyExc_TypeError,
"TritonContext::evaluateAstViaSolver(): Expects a AstNode as argument.");
1152 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1160 static PyObject* TritonContext_getAllRegisters(PyObject* self, PyObject* noarg) {
1161 PyObject* ret =
nullptr;
1168 for (
auto& reg: regs)
1169 PyList_SetItem(ret, index++,
PyRegister(reg.second));
1175 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1182 static PyObject* TritonContext_getArchitecture(PyObject* self, PyObject* noarg) {
1190 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1195 static PyObject* TritonContext_getAstContext(PyObject* self, PyObject* noarg) {
1203 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1208 static PyObject* TritonContext_getAstRepresentationMode(PyObject* self, PyObject* noarg) {
1216 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1221 static PyObject* TritonContext_getConcreteMemoryAreaValue(PyObject* self, PyObject* args, PyObject* kwargs) {
1223 PyObject* ret =
nullptr;
1224 PyObject* addr =
nullptr;
1225 PyObject* size =
nullptr;
1226 PyObject* execCallbacks =
nullptr;
1228 static char* keywords[] = {
1236 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"OO|O", keywords, &addr, &size, &execCallbacks) ==
false) {
1237 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryAreaValue(): Invalid keyword argument");
1240 if (addr ==
nullptr || (!PyLong_Check(addr) && !PyInt_Check(addr))) {
1241 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryAreaValue(): Expects an integer as addr keyword.");
1244 if (size ==
nullptr || (!PyLong_Check(size) && !PyInt_Check(size))) {
1245 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryAreaValue(): Expects an integer as size keyword.");
1248 if (execCallbacks !=
nullptr && !PyBool_Check(execCallbacks)) {
1249 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryAreaValue(): Expects a boolean as execCallbacks keyword.");
1252 if (execCallbacks ==
nullptr) {
1261 area[index] = vv[index];
1263 ret = PyBytes_FromStringAndSize(
reinterpret_cast<const char*
>(area), vv.size());
1272 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1279 static PyObject* TritonContext_getConcreteMemoryValue(PyObject* self, PyObject* args, PyObject* kwargs) {
1280 PyObject* mem =
nullptr;
1281 PyObject* execCallbacks =
nullptr;
1283 static char* keywords[] = {
1290 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"O|O", keywords, &mem, &execCallbacks) ==
false) {
1291 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryValue(): Invalid keyword argument");
1294 if (mem ==
nullptr || (!PyLong_Check(mem) && !PyInt_Check(mem) && !
PyMemoryAccess_Check(mem))) {
1295 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryValue(): Expects a MemoryAccess or an integer as mem keyword.");
1298 if (execCallbacks !=
nullptr && !PyBool_Check(execCallbacks)) {
1299 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryValue(): Expects a boolean as execCallbacks keyword.");
1302 if (execCallbacks ==
nullptr) {
1307 if (PyLong_Check(mem) || PyInt_Check(mem))
1312 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteMemoryValue(): Something wrong.");
1318 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1323 static PyObject* TritonContext_getConcreteRegisterValue(PyObject* self, PyObject* args, PyObject* kwargs) {
1324 PyObject* reg =
nullptr;
1325 PyObject* execCallbacks =
nullptr;
1327 static char* keywords[] = {
1334 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"O|O", keywords, ®, &execCallbacks) ==
false) {
1335 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteRegisterValue(): Invalid keyword argument");
1339 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteRegisterValue(): Expects a Register as reg keyword.");
1342 if (execCallbacks !=
nullptr && !PyBool_Check(execCallbacks)) {
1343 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteRegisterValue(): Expects a boolean as execCallbacks keyword.");
1346 if (execCallbacks ==
nullptr) {
1357 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1362 static PyObject* TritonContext_getConcreteVariableValue(PyObject* self, PyObject* symVar) {
1364 return PyErr_Format(PyExc_TypeError,
"TritonContext::getConcreteVariableValue(): Expects a SymbolicVariable as argument.");
1373 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1378 static PyObject* TritonContext_getGprBitSize(PyObject* self, PyObject* noarg) {
1386 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1391 static PyObject* TritonContext_getGprSize(PyObject* self, PyObject* noarg) {
1399 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1404 static PyObject* TritonContext_getImmediateAst(PyObject* self, PyObject* imm) {
1406 return PyErr_Format(PyExc_TypeError,
"TritonContext::getImmediateAst(): Expects an Immediate as argument.");
1415 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1420 static PyObject* TritonContext_getMemoryAst(PyObject* self, PyObject* mem) {
1422 return PyErr_Format(PyExc_TypeError,
"TritonContext::getMemoryAst(): Expects an MemoryAccess as argument.");
1431 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1436 static PyObject* TritonContext_getModel(PyObject* self, PyObject* args, PyObject* kwargs) {
1441 PyObject* dict =
nullptr;
1442 PyObject* node =
nullptr;
1443 PyObject* wb =
nullptr;
1444 PyObject* timeout =
nullptr;
1446 static char* keywords[] = {
1454 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OOO", keywords, &node, &wb, &timeout) ==
false) {
1455 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModel(): Invalid keyword argument.");
1459 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModel(): Expects a AstNode as node argument.");
1462 if (wb !=
nullptr && !PyBool_Check(wb)) {
1463 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModel(): Expects a boolean as status keyword.");
1466 if (timeout !=
nullptr && (!PyLong_Check(timeout) && !PyInt_Check(timeout))) {
1467 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModel(): Expects a integer as timeout keyword.");
1470 if (timeout !=
nullptr) {
1477 for (
auto it = model.begin(); it != model.end(); it++) {
1485 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1490 PyTuple_SetItem(tuple, 0, dict);
1500 static PyObject* TritonContext_getModels(PyObject* self, PyObject* args, PyObject* kwargs) {
1505 PyObject* ret =
nullptr;
1506 PyObject* node =
nullptr;
1507 PyObject* limit =
nullptr;
1508 PyObject* wb =
nullptr;
1509 PyObject* timeout =
nullptr;
1511 static char* keywords[] = {
1520 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OOOO", keywords, &node, &limit, &wb, &timeout) ==
false) {
1521 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModels(): Invalid keyword argument.");
1525 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModels(): Expects a AstNode as node argument.");
1528 if (limit ==
nullptr || (!PyLong_Check(limit) && !PyInt_Check(limit))) {
1529 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModels(): Expects an integer as limit argument.");
1532 if (wb !=
nullptr && !PyBool_Check(wb)) {
1533 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModels(): Expects a boolean as status keyword.");
1536 if (timeout !=
nullptr && (!PyLong_Check(timeout) && !PyInt_Check(timeout))) {
1537 return PyErr_Format(PyExc_TypeError,
"TritonContext::getModels(): Expects a integer as timeout keyword.");
1540 if (timeout !=
nullptr) {
1549 for (
auto it = models.begin(); it != models.end(); it++) {
1553 for (
auto it2 = model.begin(); it2 != model.end(); it2++) {
1556 if (model.size() > 0)
1557 PyList_SetItem(ret, index++, mdict);
1564 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1569 PyTuple_SetItem(tuple, 0, ret);
1579 static PyObject* TritonContext_getParentRegisters(PyObject* self, PyObject* noarg) {
1580 PyObject* ret =
nullptr;
1587 for (
const auto* reg: regs) {
1588 PyList_SetItem(ret, index++,
PyRegister(*reg));
1595 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1602 static PyObject* TritonContext_getPathConstraints(PyObject* self, PyObject* noarg) {
1603 PyObject* ret =
nullptr;
1610 for (
auto it = pc.begin(); it != pc.end(); it++) {
1618 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1625 static PyObject* TritonContext_getPathPredicate(PyObject* self, PyObject* noarg) {
1633 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1638 static PyObject* TritonContext_getPathPredicateSize(PyObject* self, PyObject* noarg) {
1647 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1652 static PyObject* TritonContext_getPredicatesToReachAddress(PyObject* self, PyObject* addr) {
1653 PyObject* ret =
nullptr;
1655 if (addr ==
nullptr || (!PyLong_Check(addr) && !PyInt_Check(addr)))
1656 return PyErr_Format(PyExc_TypeError,
"TritonContext::getPredicatesToReachAddress(): Expects an address as argument.");
1663 for (
auto it = preds.begin(); it != preds.end(); it++) {
1664 PyList_SetItem(ret, index++,
PyAstNode(*it));
1671 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1678 static PyObject* TritonContext_getRegister(PyObject* self, PyObject* regIn) {
1680 if (regIn !=
nullptr && (PyLong_Check(regIn) || PyInt_Check(regIn))) {
1686 else if (regIn !=
nullptr && (PyStr_Check(regIn))) {
1687 std::string name = std::string(PyStr_AsString(regIn));
1693 return PyErr_Format(PyExc_TypeError,
"TritonContext::getRegister(): Expects an integer or a string as argument.");
1700 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1705 static PyObject* TritonContext_getRegisterAst(PyObject* self, PyObject* reg) {
1707 return PyErr_Format(PyExc_TypeError,
"TritonContext::getRegisterAst(): Expects an Register as argument.");
1716 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1721 static PyObject* TritonContext_getSolver(PyObject* self, PyObject* noarg) {
1729 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1734 static PyObject* TritonContext_getSymbolicExpression(PyObject* self, PyObject* symExprId) {
1735 if (!PyLong_Check(symExprId) && !PyInt_Check(symExprId))
1736 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicExpression(): Expects an integer as argument.");
1745 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1750 static PyObject* TritonContext_getSymbolicExpressions(PyObject* self, PyObject* noarg) {
1751 PyObject* ret =
nullptr;
1757 for (
auto it = expressions.begin(); it != expressions.end(); it++)
1764 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1771 static PyObject* TritonContext_getSymbolicMemory(PyObject* self, PyObject* args) {
1772 PyObject* ret =
nullptr;
1773 PyObject* addr =
nullptr;
1776 if (PyArg_ParseTuple(args,
"|O", &addr) ==
false) {
1777 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicMemory(): Invalid number of arguments");
1781 if (addr ==
nullptr) {
1785 for (
auto it = regs.begin(); it != regs.end(); it++) {
1789 else if (addr !=
nullptr && (PyLong_Check(addr) || PyInt_Check(addr))) {
1793 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicMemory(): Expects an integer or nothing as argument.");
1799 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1806 static PyObject* TritonContext_getSymbolicMemoryValue(PyObject* self, PyObject* mem) {
1808 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicMemoryValue(): Expects an integer or a MemoryAccess as argument.");
1811 if (PyLong_Check(mem) || PyInt_Check(mem))
1819 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1824 static PyObject* TritonContext_getSymbolicRegisters(PyObject* self, PyObject* noarg) {
1825 PyObject* ret =
nullptr;
1831 for (
auto it = regs.begin(); it != regs.end(); it++) {
1839 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1846 static PyObject* TritonContext_getSymbolicRegister(PyObject* self, PyObject* reg) {
1848 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicRegister(): Expects a Register as argument.");
1857 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1862 static PyObject* TritonContext_getSymbolicRegisterValue(PyObject* self, PyObject* reg) {
1864 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicRegisterValue(): Expects a Register as argument.");
1873 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1878 static PyObject* TritonContext_getSymbolicVariable(PyObject* self, PyObject* arg) {
1880 if (PyLong_Check(arg) || PyInt_Check(arg))
1883 else if (PyStr_Check(arg))
1887 return PyErr_Format(PyExc_TypeError,
"TritonContext::getSymbolicVariable(): Expects an integer or a string as argument.");
1893 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1898 static PyObject* TritonContext_getSymbolicVariables(PyObject* self, PyObject* noarg) {
1899 PyObject* ret =
nullptr;
1905 for (
auto sv: variables)
1912 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1919 static PyObject* TritonContext_getTaintedMemory(PyObject* self, PyObject* noarg) {
1920 PyObject* ret =
nullptr;
1926 size = addresses.size();
1928 for (
auto it = addresses.begin(); it != addresses.end(); it++) {
1937 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1944 static PyObject* TritonContext_getTaintedRegisters(PyObject* self, PyObject* noarg) {
1945 PyObject* ret =
nullptr;
1951 size = registers.size();
1953 for (
const auto* reg: registers) {
1954 PyList_SetItem(ret, index,
PyRegister(*reg));
1962 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1969 static PyObject* TritonContext_getTaintedSymbolicExpressions(PyObject* self, PyObject* noarg) {
1970 PyObject* ret =
nullptr;
1976 size = expressions.size();
1978 for (
auto it = expressions.begin(); it != expressions.end(); it++) {
1987 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
1994 static PyObject* TritonContext_initLeaAst(PyObject* self, PyObject* mem) {
2000 return PyErr_Format(PyExc_TypeError,
"TritonContext::initLeaAst(): Expects a MemoryAccess as argument.");
2006 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2014 static PyObject* TritonContext_isArchitectureValid(PyObject* self, PyObject* noarg) {
2024 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2029 static PyObject* TritonContext_isConcreteMemoryValueDefined(PyObject* self, PyObject* args) {
2030 PyObject* baseAddr =
nullptr;
2031 PyObject* size =
nullptr;
2034 if (PyArg_ParseTuple(args,
"|OO", &baseAddr, &size) ==
false) {
2035 return PyErr_Format(PyExc_TypeError,
"TritonContext::isConcreteMemoryValueDefined(): Invalid number of arguments");
2044 else if (baseAddr && (PyLong_Check(baseAddr) || PyInt_Check(baseAddr))) {
2045 if (size && (PyLong_Check(size) || PyInt_Check(size))) {
2051 return PyErr_Format(PyExc_TypeError,
"TritonContext::isConcreteMemoryValueDefined(): Expects a size (integer) as second argument.");
2055 return PyErr_Format(PyExc_TypeError,
"TritonContext::isConcreteMemoryValueDefined(): Expects a base address (integer) as arguments or a memory cells.");
2062 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2067 static PyObject* TritonContext_isFlag(PyObject* self, PyObject* reg) {
2069 return PyErr_Format(PyExc_TypeError,
"TritonContext::isFlag(): Expects a Register as argument.");
2080 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2085 static PyObject* TritonContext_isMemorySymbolized(PyObject* self, PyObject* mem) {
2092 else if (PyLong_Check(mem) || PyInt_Check(mem)) {
2098 return PyErr_Format(PyExc_TypeError,
"TritonContext::isMemorySymbolized(): Expects a MemoryAccess or an integer as argument.");
2104 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2111 static PyObject* TritonContext_isMemoryTainted(PyObject* self, PyObject* mem) {
2118 else if (PyLong_Check(mem) || PyInt_Check(mem)) {
2124 return PyErr_Format(PyExc_TypeError,
"TritonContext::isMemoryTainted(): Expects a MemoryAccess or an integer as argument.");
2130 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2137 static PyObject* TritonContext_isRegister(PyObject* self, PyObject* reg) {
2139 return PyErr_Format(PyExc_TypeError,
"TritonContext::isRegister(): Expects a Register as argument.");
2150 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2155 static PyObject* TritonContext_isRegisterSymbolized(PyObject* self, PyObject* reg) {
2157 return PyErr_Format(PyExc_TypeError,
"TritonContext::isRegisterSymbolized(): Expects a Register as argument.");
2168 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2173 static PyObject* TritonContext_isRegisterTainted(PyObject* self, PyObject* reg) {
2175 return PyErr_Format(PyExc_TypeError,
"TritonContext::isRegisterTainted(): Expects a Register as argument.");
2186 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2191 static PyObject* TritonContext_isRegisterValid(PyObject* self, PyObject* reg) {
2193 return PyErr_Format(PyExc_TypeError,
"TritonContext::isRegisterValid(): Expects a Register as argument.");
2204 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2209 static PyObject* TritonContext_isSat(PyObject* self, PyObject* node) {
2211 return PyErr_Format(PyExc_TypeError,
"TritonContext::isSat(): Expects a AstNode as argument.");
2222 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2227 static PyObject* TritonContext_isSymbolicExpressionExists(PyObject* self, PyObject* symExprId) {
2228 if (!PyInt_Check(symExprId) && !PyLong_Check(symExprId))
2229 return PyErr_Format(PyExc_TypeError,
"TritonContext::isSymbolicExpressionExists(): Expects an integer as argument.");
2240 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2245 static PyObject* TritonContext_isModeEnabled(PyObject* self, PyObject* mode) {
2246 if (!PyInt_Check(mode) && !PyLong_Check(mode))
2247 return PyErr_Format(PyExc_TypeError,
"TritonContext::isModeEnabled(): Expects a MODE as argument.");
2258 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2263 static PyObject* TritonContext_isThumb(PyObject* self, PyObject* noarg) {
2273 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2278 static PyObject* TritonContext_liftToDot(PyObject* self, PyObject* node) {
2280 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToDot(): Expects an AstNode or a SymbolicExpression as first argument.");
2283 std::ostringstream stream;
2298 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2306 static PyObject* TritonContext_liftToLLVM(PyObject* self, PyObject* args, PyObject* kwargs) {
2307 PyObject* node =
nullptr;
2308 PyObject* fname =
nullptr;
2309 PyObject* optimize =
nullptr;
2311 static char* keywords[] = {
2319 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OOO", keywords, &node, &fname, &optimize) ==
false) {
2320 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToLLVM(): Invalid number of arguments");
2324 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToLLVM(): Expects a SymbolicExpression or a AstNode as node argument.");
2326 if (fname !=
nullptr && !PyStr_Check(fname))
2327 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToLLVM(): Expects a string as fname argument.");
2329 if (optimize !=
nullptr && !PyBool_Check(optimize))
2330 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToLLVM(): Expects a boolean as optimize argument.");
2332 if (fname ==
nullptr)
2333 fname = PyStr_FromString(
"__triton");
2335 if (optimize ==
nullptr)
2339 std::ostringstream stream;
2352 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2360 static PyObject* TritonContext_liftToPython(PyObject* self, PyObject* args, PyObject* kwargs) {
2361 PyObject* expr =
nullptr;
2362 PyObject* icomment =
nullptr;
2364 static char* keywords[] = {
2371 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OO", keywords, &expr, &icomment) ==
false) {
2372 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToPython(): Invalid number of arguments");
2376 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToPython(): Expects a SymbolicExpression as expr argument.");
2378 if (icomment !=
nullptr && !PyBool_Check(icomment))
2379 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToPython(): Expects a boolean as icomment argument.");
2381 if (icomment ==
nullptr)
2385 std::ostringstream stream;
2393 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2401 static PyObject* TritonContext_liftToSMT(PyObject* self, PyObject* args, PyObject* kwargs) {
2402 PyObject* expr =
nullptr;
2403 PyObject* assert =
nullptr;
2404 PyObject* icomment =
nullptr;
2406 static char* keywords[] = {
2414 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OO", keywords, &expr, &assert, &icomment) ==
false) {
2415 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToSMT(): Invalid number of arguments");
2419 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToSMT(): Expects a SymbolicExpression as expr argument.");
2421 if (assert !=
nullptr && !PyBool_Check(assert))
2422 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToSMT(): Expects a boolean as assert_ argument.");
2424 if (assert ==
nullptr)
2427 if (icomment !=
nullptr && !PyBool_Check(icomment))
2428 return PyErr_Format(PyExc_TypeError,
"TritonContext::liftToSMT(): Expects a boolean as icomment argument.");
2430 if (icomment ==
nullptr)
2434 std::ostringstream stream;
2442 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2450 static PyObject* TritonContext_newSymbolicExpression(PyObject* self, PyObject* args) {
2451 PyObject* node =
nullptr;
2452 PyObject* comment =
nullptr;
2453 std::string ccomment =
"";
2456 if (PyArg_ParseTuple(args,
"|OO", &node, &comment) ==
false) {
2457 return PyErr_Format(PyExc_TypeError,
"TritonContext::newSymbolicExpression(): Invalid number of arguments");
2461 return PyErr_Format(PyExc_TypeError,
"TritonContext::newSymbolicExpression(): Expects a AstNode as first argument.");
2463 if (comment !=
nullptr && !PyStr_Check(comment))
2464 return PyErr_Format(PyExc_TypeError,
"TritonContext::newSymbolicExpression(): Expects a sting as second argument.");
2466 if (comment !=
nullptr)
2467 ccomment = PyStr_AsString(comment);
2476 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2481 static PyObject* TritonContext_newSymbolicVariable(PyObject* self, PyObject* args) {
2482 PyObject* size =
nullptr;
2483 PyObject* alias =
nullptr;
2484 std::string calias =
"";
2487 if (PyArg_ParseTuple(args,
"|OO", &size, &alias) ==
false) {
2488 return PyErr_Format(PyExc_TypeError,
"TritonContext::newSymbolicVariable(): Invalid number of arguments");
2491 if (size ==
nullptr || (!PyLong_Check(size) && !PyInt_Check(size)))
2492 return PyErr_Format(PyExc_TypeError,
"TritonContext::newSymbolicVariable(): Expects an integer as first argument.");
2494 if (alias !=
nullptr && !PyStr_Check(alias))
2495 return PyErr_Format(PyExc_TypeError,
"TritonContext::newSymbolicVariable(): Expects a sting as second argument.");
2497 if (alias !=
nullptr)
2498 calias = PyStr_AsString(alias);
2507 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2512 static PyObject* TritonContext_popPathConstraint(PyObject* self, PyObject* noarg) {
2520 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2527 static PyObject* TritonContext_processing(PyObject* self, PyObject* args) {
2528 PyObject* obj =
nullptr;
2529 PyObject* addr =
nullptr;
2532 if (PyArg_ParseTuple(args,
"|OO", &obj, &addr) ==
false) {
2533 return PyErr_Format(PyExc_TypeError,
"TritonContext::processing(): Invalid number of arguments");
2542 if (addr !=
nullptr && (PyLong_Check(addr) || PyInt_Check(addr))) {
2547 return PyErr_Format(PyExc_TypeError,
"TritonContext::processing(): Expects an Instruction or a BasicBlock as argument.");
2553 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2558 static PyObject* TritonContext_pushPathConstraint(PyObject* self, PyObject* args, PyObject* kwargs) {
2559 PyObject* node =
nullptr;
2560 PyObject* comment =
nullptr;
2561 std::string ccomment =
"";
2563 static char* keywords[] = {
2570 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OO", keywords, &node, &comment) ==
false) {
2571 return PyErr_Format(PyExc_TypeError,
"TritonContext::pushPathConstraint(): Invalid keyword argument.");
2575 return PyErr_Format(PyExc_TypeError,
"TritonContext::pushPathConstraint(): Expects an AstNode as first argument.");
2577 if (comment !=
nullptr && !PyStr_Check(comment))
2578 return PyErr_Format(PyExc_TypeError,
"TritonContext::pushPathConstraint(): Expects a string as second argument.");
2580 if (comment !=
nullptr)
2581 ccomment = PyStr_AsString(comment);
2590 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2598 static PyObject* TritonContext_removeCallback(PyObject* self, PyObject* args) {
2599 PyObject* cb =
nullptr;
2600 PyObject* cb_self =
nullptr;
2601 PyObject* function =
nullptr;
2602 PyObject* mode =
nullptr;
2605 if (PyArg_ParseTuple(args,
"|OO", &mode, &function) ==
false) {
2606 return PyErr_Format(PyExc_TypeError,
"TritonContext::removeCallback(): Invalid number of arguments");
2609 if (mode ==
nullptr || (!PyLong_Check(mode) && !PyInt_Check(mode)))
2610 return PyErr_Format(PyExc_TypeError,
"TritonContext::removeCallback(): Expects a CALLBACK as first argument.");
2612 if (function ==
nullptr || !PyCallable_Check(function))
2613 return PyErr_Format(PyExc_TypeError,
"TritonContext::removeCallback(): Expects a function as second argument.");
2616 if (PyMethod_Check(function)) {
2617 cb_self = PyMethod_GET_SELF(function);
2618 cb = PyMethod_GET_FUNCTION(function);
2642 return PyErr_Format(PyExc_TypeError,
"TritonContext::removeCallback(): Invalid kind of callback.");
2649 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2653 if (cb_self !=
nullptr) {
2662 static PyObject* TritonContext_reset(PyObject* self, PyObject* noarg) {
2670 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2678 static PyObject* TritonContext_setArchitecture(PyObject* self, PyObject* arg) {
2679 if (!PyLong_Check(arg) && !PyInt_Check(arg))
2680 return PyErr_Format(PyExc_TypeError,
"TritonContext::setArchitecture(): Expects an ARCH as argument.");
2685 TritonContext_fillRegistersAttribute(self);
2691 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2699 static PyObject* TritonContext_setAstRepresentationMode(PyObject* self, PyObject* arg) {
2700 if (!PyLong_Check(arg) && !PyInt_Check(arg))
2701 return PyErr_Format(PyExc_TypeError,
"TritonContext::setAstRepresentationMode(): Expects an AST_REPRESENTATION as argument.");
2710 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2718 static PyObject* TritonContext_setConcreteMemoryAreaValue(PyObject* self, PyObject* args, PyObject* kwargs) {
2719 std::vector<triton::uint8> vv;
2720 PyObject* baseAddr =
nullptr;
2721 PyObject* values =
nullptr;
2722 PyObject* execCallbacks =
nullptr;
2724 static char* keywords[] = {
2732 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"OO|O", keywords, &baseAddr, &values, &execCallbacks) ==
false) {
2733 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Invalid keyword argument");
2736 if (baseAddr ==
nullptr || (!PyLong_Check(baseAddr) && !PyInt_Check(baseAddr))) {
2737 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Expects an integer as baseAddr keyword.");
2740 if (values ==
nullptr || (!PyList_Check(values) && !PyBytes_Check(values) && !PyByteArray_Check(values))) {
2741 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Expects a list or bytes as values keyword.");
2744 if (execCallbacks !=
nullptr && !PyBool_Check(execCallbacks)) {
2745 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Expects a boolean as execCallbacks keyword.");
2748 if (execCallbacks ==
nullptr) {
2753 if (PyList_Check(values)) {
2754 for (Py_ssize_t i = 0; i < PyList_Size(values); i++) {
2755 PyObject* item = PyList_GetItem(values, i);
2757 if ((!PyLong_Check(item) && !PyInt_Check(item)) ||
PyLong_AsUint32(item) > 0xff)
2758 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Each item of the list must be a 8-bits integer.");
2770 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2775 else if (PyBytes_Check(values)) {
2786 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2791 else if (PyByteArray_Check(values)) {
2802 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2808 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Something wrong.");
2815 static PyObject* TritonContext_setConcreteMemoryValue(PyObject* self, PyObject* args, PyObject* kwargs) {
2816 PyObject* mem =
nullptr;
2817 PyObject* value =
nullptr;
2818 PyObject* execCallbacks =
nullptr;
2820 static char* keywords[] = {
2828 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"OO|O", keywords, &mem, &value, &execCallbacks) ==
false) {
2829 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryValue(): Invalid keyword argument");
2832 if (mem ==
nullptr || (!PyLong_Check(mem) && !PyInt_Check(mem) && !
PyMemoryAccess_Check(mem))) {
2833 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryValue(): Expects a MemoryAccess or an integer as mem keyword.");
2836 if (value ==
nullptr || (!PyLong_Check(value) && !PyInt_Check(value))) {
2837 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryValue(): Expects an integer as value keyword.");
2840 if (execCallbacks !=
nullptr && !PyBool_Check(execCallbacks)) {
2841 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Expects a boolean as execCallbacks keyword.");
2844 if (execCallbacks ==
nullptr) {
2849 if (PyLong_Check(mem) || PyInt_Check(mem)) {
2854 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryValue(): Value must be on 8 bits.");
2863 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2878 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2884 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryValue(): something wrong.");
2891 static PyObject* TritonContext_setConcreteRegisterValue(PyObject* self, PyObject* args, PyObject* kwargs) {
2892 PyObject* reg =
nullptr;
2893 PyObject* value =
nullptr;
2894 PyObject* execCallbacks =
nullptr;
2896 static char* keywords[] = {
2904 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"OO|O", keywords, ®, &value, &execCallbacks) ==
false) {
2905 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteRegisterValue(): Invalid keyword argument");
2909 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteRegisterValue(): Expects a Register as reg keyword.");
2912 if (value ==
nullptr || (!PyLong_Check(value) && !PyInt_Check(value))) {
2913 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteRegisterValue(): Expects an integer as value keyword.");
2916 if (execCallbacks !=
nullptr && !PyBool_Check(execCallbacks)) {
2917 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteMemoryAreaValue(): Expects a boolean as execCallbacks keyword.");
2920 if (execCallbacks ==
nullptr) {
2932 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2940 static PyObject* TritonContext_setConcreteVariableValue(PyObject* self, PyObject* args) {
2941 PyObject* symVar =
nullptr;
2942 PyObject* value =
nullptr;
2945 if (PyArg_ParseTuple(args,
"|OO", &symVar, &value) ==
false) {
2946 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteVariableValue(): Invalid number of arguments");
2950 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteVariableValue(): Bad argument type.");
2952 if (value ==
nullptr)
2953 return PyErr_Format(PyExc_TypeError,
"TritonContext::setConcreteVariableValue(): Expects a second argument as integer value.");
2962 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
2970 static PyObject* TritonContext_setMode(PyObject* self, PyObject* args) {
2971 PyObject* mode =
nullptr;
2972 PyObject*
flag =
nullptr;
2975 if (PyArg_ParseTuple(args,
"|OO", &mode, &flag) ==
false) {
2976 return PyErr_Format(PyExc_TypeError,
"TritonContext::setMode(): Invalid number of arguments");
2979 if (mode ==
nullptr || (!PyLong_Check(mode) && !PyInt_Check(mode)))
2980 return PyErr_Format(PyExc_TypeError,
"TritonContext::setMode(): Expects a MODE as argument.");
2982 if (flag ==
nullptr || !PyBool_Check(flag))
2983 return PyErr_Format(PyExc_TypeError,
"TritonContext::setMode(): Expects an boolean flag as second argument.");
2992 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3000 static PyObject* TritonContext_setSolver(PyObject* self, PyObject* solver) {
3001 if (solver ==
nullptr || (!PyLong_Check(solver) && !PyInt_Check(solver)))
3002 return PyErr_Format(PyExc_TypeError,
"TritonContext::setSolver(): Expects a SOLVER as argument.");
3008 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3016 static PyObject* TritonContext_setSolverMemoryLimit(PyObject* self, PyObject* megabytes) {
3017 if (megabytes ==
nullptr || (!PyLong_Check(megabytes) && !PyInt_Check(megabytes)))
3018 return PyErr_Format(PyExc_TypeError,
"TritonContext::setSolverMemoryLimit(): Expects an integer as argument.");
3024 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3032 static PyObject* TritonContext_setSolverTimeout(PyObject* self, PyObject* ms) {
3033 if (ms ==
nullptr || (!PyLong_Check(ms) && !PyInt_Check(ms)))
3034 return PyErr_Format(PyExc_TypeError,
"TritonContext::setSolverTimeout(): Expects an integer as argument.");
3040 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3048 static PyObject* TritonContext_setTaintMemory(PyObject* self, PyObject* args) {
3049 PyObject* mem =
nullptr;
3050 PyObject*
flag =
nullptr;
3053 if (PyArg_ParseTuple(args,
"|OO", &mem, &flag) ==
false) {
3054 return PyErr_Format(PyExc_TypeError,
"TritonContext::setTaintMemory(): Invalid number of arguments");
3058 return PyErr_Format(PyExc_TypeError,
"TritonContext::setTaintMemory(): Expects a MemoryAccess as first argument.");
3060 if (flag ==
nullptr || !PyBool_Check(flag))
3061 return PyErr_Format(PyExc_TypeError,
"TritonContext::setTaintMemory(): Expects a boolean as second argument.");
3072 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3077 static PyObject* TritonContext_setTaintRegister(PyObject* self, PyObject* args) {
3078 PyObject* reg =
nullptr;
3079 PyObject*
flag =
nullptr;
3082 if (PyArg_ParseTuple(args,
"|OO", ®, &flag) ==
false) {
3083 return PyErr_Format(PyExc_TypeError,
"TritonContext::setTaintRegister(): Invalid number of arguments");
3087 return PyErr_Format(PyExc_TypeError,
"TritonContext::setTaintRegister(): Expects a Register as first argument.");
3089 if (flag ==
nullptr || !PyBool_Check(flag))
3090 return PyErr_Format(PyExc_TypeError,
"TritonContext::setTaintRegister(): Expects a boolean as second argument.");
3101 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3106 static PyObject* TritonContext_setThumb(PyObject* self, PyObject* state) {
3107 if (state ==
nullptr || !PyBool_Check(state))
3108 return PyErr_Format(PyExc_TypeError,
"TritonContext::setThumb(): Expects an boolean as argument.");
3114 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3122 static PyObject* TritonContext_simplify(PyObject* self, PyObject* args, PyObject* kwargs) {
3123 PyObject* obj =
nullptr;
3124 PyObject* solver =
nullptr;
3125 PyObject* llvm =
nullptr;
3126 PyObject* padding =
nullptr;
3128 static char* keywords[] = {
3137 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OOOO", keywords, &obj, &solver, &llvm, &padding) ==
false) {
3138 return PyErr_Format(PyExc_TypeError,
"TritonContext::simplify(): Invalid number of arguments");
3142 return PyErr_Format(PyExc_TypeError,
"TritonContext::simplify(): Expects a AstNode or a BasicBlock as obj argument.");
3144 if (solver !=
nullptr && !PyBool_Check(solver))
3145 return PyErr_Format(PyExc_TypeError,
"TritonContext::simplify(): Expects a boolean as solver argument.");
3147 if (llvm !=
nullptr && !PyBool_Check(llvm))
3148 return PyErr_Format(PyExc_TypeError,
"TritonContext::simplify(): Expects a boolean as llvm argument.");
3150 if (padding !=
nullptr && !PyBool_Check(padding))
3151 return PyErr_Format(PyExc_TypeError,
"TritonContext::simplify(): Expects a boolean as padding argument.");
3153 if (solver ==
nullptr)
3156 if (llvm ==
nullptr)
3159 if (padding ==
nullptr)
3170 return PyErr_Format(PyExc_TypeError,
"TritonContext::simplify(): Something wrong.");
3176 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3181 static PyObject* TritonContext_sliceExpressions(PyObject* self, PyObject* expr) {
3182 PyObject* ret =
nullptr;
3185 return PyErr_Format(PyExc_TypeError,
"TritonContext::sliceExpressions(): Expects a SymbolicExpression as argument.");
3191 for (
auto it = exprs.begin(); it != exprs.end(); it++)
3198 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3205 static PyObject* TritonContext_symbolizeExpression(PyObject* self, PyObject* args) {
3206 PyObject* exprId =
nullptr;
3207 PyObject* symVarSize =
nullptr;
3208 PyObject* symVarAlias =
nullptr;
3209 std::string calias =
"";
3212 if (PyArg_ParseTuple(args,
"|OOO", &exprId, &symVarSize, &symVarAlias) ==
false) {
3213 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeExpression(): Invalid number of arguments");
3216 if (exprId ==
nullptr || (!PyLong_Check(exprId) && !PyInt_Check(exprId)))
3217 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeExpression(): Expects an integer as first argument.");
3219 if (symVarSize ==
nullptr || (!PyLong_Check(symVarSize) && !PyInt_Check(symVarSize)))
3220 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeExpression(): Expects an integer as second argument.");
3222 if (symVarAlias !=
nullptr && !PyStr_Check(symVarAlias))
3223 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeExpression(): Expects a sting as third argument.");
3225 if (symVarAlias !=
nullptr)
3226 calias = PyStr_AsString(symVarAlias);
3235 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3240 static PyObject* TritonContext_symbolizeMemory(PyObject* self, PyObject* args) {
3241 PyObject* mem =
nullptr;
3242 PyObject* symVarAlias =
nullptr;
3243 std::string calias =
"";
3246 if (PyArg_ParseTuple(args,
"|OO", &mem, &symVarAlias) ==
false) {
3247 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeMemory(): Invalid number of arguments");
3251 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeMemory(): Expects a MemoryAccess as first argument.");
3253 if (symVarAlias !=
nullptr && !PyStr_Check(symVarAlias))
3254 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeMemory(): Expects a sting as second argument.");
3256 if (symVarAlias !=
nullptr)
3257 calias = PyStr_AsString(symVarAlias);
3266 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3271 static PyObject* TritonContext_symbolizeRegister(PyObject* self, PyObject* args) {
3272 PyObject* reg =
nullptr;
3273 PyObject* symVarAlias =
nullptr;
3274 std::string calias =
"";
3277 if (PyArg_ParseTuple(args,
"|OO", ®, &symVarAlias) ==
false) {
3278 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeRegister(): Invalid number of arguments");
3282 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeRegister(): Expects a Register as first argument.");
3284 if (symVarAlias !=
nullptr && !PyStr_Check(symVarAlias))
3285 return PyErr_Format(PyExc_TypeError,
"TritonContext::symbolizeRegister(): Expects a sting as second argument.");
3287 if (symVarAlias !=
nullptr)
3288 calias = PyStr_AsString(symVarAlias);
3297 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3302 static PyObject* TritonContext_synthesize(PyObject* self, PyObject* args, PyObject* kwargs) {
3303 PyObject* node =
nullptr;
3304 PyObject* constant =
nullptr;
3305 PyObject* subexpr =
nullptr;
3306 PyObject* opaque =
nullptr;
3308 static char* keywords[] = {
3317 if (PyArg_ParseTupleAndKeywords(args, kwargs,
"|OOOO", keywords, &node, &constant, &subexpr, &opaque) ==
false) {
3318 return PyErr_Format(PyExc_TypeError,
"TritonContext::synthesize(): Invalid number of arguments");
3322 return PyErr_Format(PyExc_TypeError,
"TritonContext::synthesize(): Expects a AstNode as node argument.");
3324 if (constant !=
nullptr && !PyBool_Check(constant))
3325 return PyErr_Format(PyExc_TypeError,
"TritonContext::synthesize(): Expects a boolean as constant argument.");
3327 if (subexpr !=
nullptr && !PyBool_Check(subexpr))
3328 return PyErr_Format(PyExc_TypeError,
"TritonContext::synthesize(): Expects a boolean as subexpr argument.");
3330 if (opaque !=
nullptr && !PyBool_Check(opaque))
3331 return PyErr_Format(PyExc_TypeError,
"TritonContext::synthesize(): Expects a boolean as opaque argument.");
3333 if (constant ==
nullptr)
3336 if (subexpr ==
nullptr)
3339 if (opaque ==
nullptr)
3344 if (result.successful()) {
3356 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3361 static PyObject* TritonContext_taintAssignment(PyObject* self, PyObject* args) {
3362 PyObject* op1 =
nullptr;
3363 PyObject* op2 =
nullptr;
3367 if (PyArg_ParseTuple(args,
"OO", &op1, &op2) ==
false) {
3368 return PyErr_Format(PyExc_TypeError,
"TritonContext::taintAssignment(): Invalid number of arguments");
3391 return PyErr_Format(PyExc_TypeError,
"TritonContext::taintAssignment(): Invalid kind of parameter.");
3402 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3407 static PyObject* TritonContext_taintMemory(PyObject* self, PyObject* mem) {
3414 else if (PyLong_Check(mem) || PyInt_Check(mem)) {
3420 return PyErr_Format(PyExc_TypeError,
"TritonContext::taintMemory(): Expects a MemoryAccess or an integer as argument.");
3426 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3432 static PyObject* TritonContext_taintRegister(PyObject* self, PyObject* reg) {
3434 return PyErr_Format(PyExc_TypeError,
"TritonContext::taintRegister(): Expects a Register as argument.");
3445 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3450 static PyObject* TritonContext_taintUnion(PyObject* self, PyObject* args) {
3451 PyObject* op1 =
nullptr;
3452 PyObject* op2 =
nullptr;
3456 if (PyArg_ParseTuple(args,
"OO", &op1, &op2) ==
false) {
3457 return PyErr_Format(PyExc_TypeError,
"TritonContext::taintUnion(): Invalid number of arguments");
3480 return PyErr_Format(PyExc_TypeError,
"TritonContext::taintUnion(): Invalid kind of parameter.");
3491 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3496 static PyObject* TritonContext_untaintMemory(PyObject* self, PyObject* mem) {
3503 else if (PyLong_Check(mem) || PyInt_Check(mem)) {
3509 return PyErr_Format(PyExc_TypeError,
"TritonContext::untaintMemory(): Expects a MemoryAccess or an integer as argument.");
3515 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3521 static PyObject* TritonContext_untaintRegister(PyObject* self, PyObject* reg) {
3523 return PyErr_Format(PyExc_TypeError,
"TritonContext::untaintRegister(): Expects a Register as argument.");
3534 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3539 static PyObject* TritonContext_getParentRegister(PyObject* self, PyObject* reg) {
3541 return PyErr_Format(PyExc_TypeError,
"TritonContext::getParentRegister(): Expects a Register as argument.");
3550 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3555 static PyObject* TritonContext_getattro(PyObject* self, PyObject* name) {
3558 if (std::string(PyStr_AsString(name)) ==
"registers") {
3562 return PyErr_Format(PyExc_TypeError,
"__getattr__.registers: Architecture is not defined.");
3565 if (((TritonContext_Object*)(self))->regAttr ==
nullptr)
3566 TritonContext_fillRegistersAttribute(self);
3568 Py_INCREF(((TritonContext_Object*)(self))->regAttr);
3569 return ((TritonContext_Object*)(self))->regAttr;
3576 return PyErr_Format(PyExc_TypeError,
"%s", e.
what());
3579 return PyObject_GenericGetAttr((PyObject *)self, name);
3585 {
"addCallback", (PyCFunction)TritonContext_addCallback, METH_VARARGS,
""},
3586 {
"assignSymbolicExpressionToMemory", (PyCFunction)TritonContext_assignSymbolicExpressionToMemory, METH_VARARGS,
""},
3587 {
"assignSymbolicExpressionToRegister", (PyCFunction)TritonContext_assignSymbolicExpressionToRegister, METH_VARARGS,
""},
3588 {
"buildSemantics", (PyCFunction)TritonContext_buildSemantics, METH_O,
""},
3589 {
"clearCallbacks", (PyCFunction)TritonContext_clearCallbacks, METH_NOARGS,
""},
3590 {
"clearModes", (PyCFunction)TritonContext_clearModes, METH_NOARGS,
""},
3591 {
"clearConcreteMemoryValue", (PyCFunction)TritonContext_clearConcreteMemoryValue, METH_VARARGS,
""},
3592 {
"clearPathConstraints", (PyCFunction)TritonContext_clearPathConstraints, METH_NOARGS,
""},
3593 {
"concretizeAllMemory", (PyCFunction)TritonContext_concretizeAllMemory, METH_NOARGS,
""},
3594 {
"concretizeAllRegister", (PyCFunction)TritonContext_concretizeAllRegister, METH_NOARGS,
""},
3595 {
"concretizeMemory", (PyCFunction)TritonContext_concretizeMemory, METH_O,
""},
3596 {
"concretizeRegister", (PyCFunction)TritonContext_concretizeRegister, METH_O,
""},
3597 {
"createSymbolicMemoryExpression", (PyCFunction)TritonContext_createSymbolicMemoryExpression, METH_VARARGS,
""},
3598 {
"createSymbolicRegisterExpression", (PyCFunction)TritonContext_createSymbolicRegisterExpression, METH_VARARGS,
""},
3599 {
"createSymbolicVolatileExpression", (PyCFunction)TritonContext_createSymbolicVolatileExpression, METH_VARARGS,
""},
3600 {
"disassembly", (PyCFunction)TritonContext_disassembly, METH_VARARGS,
""},
3601 {
"evaluateAstViaSolver", (PyCFunction)TritonContext_evaluateAstViaSolver, METH_O,
""},
3602 {
"getAllRegisters", (PyCFunction)TritonContext_getAllRegisters, METH_NOARGS,
""},
3603 {
"getArchitecture", (PyCFunction)TritonContext_getArchitecture, METH_NOARGS,
""},
3604 {
"getAstContext", (PyCFunction)TritonContext_getAstContext, METH_NOARGS,
""},
3605 {
"getAstRepresentationMode", (PyCFunction)TritonContext_getAstRepresentationMode, METH_NOARGS,
""},
3606 {
"getConcreteMemoryAreaValue", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_getConcreteMemoryAreaValue, METH_VARARGS | METH_KEYWORDS,
""},
3607 {
"getConcreteMemoryValue", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_getConcreteMemoryValue, METH_VARARGS | METH_KEYWORDS,
""},
3608 {
"getConcreteRegisterValue", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_getConcreteRegisterValue, METH_VARARGS | METH_KEYWORDS,
""},
3609 {
"getConcreteVariableValue", (PyCFunction)TritonContext_getConcreteVariableValue, METH_O,
""},
3610 {
"getGprBitSize", (PyCFunction)TritonContext_getGprBitSize, METH_NOARGS,
""},
3611 {
"getGprSize", (PyCFunction)TritonContext_getGprSize, METH_NOARGS,
""},
3612 {
"getImmediateAst", (PyCFunction)TritonContext_getImmediateAst, METH_O,
""},
3613 {
"getMemoryAst", (PyCFunction)TritonContext_getMemoryAst, METH_O,
""},
3614 {
"getModel", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_getModel, METH_VARARGS | METH_KEYWORDS,
""},
3615 {
"getModels", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_getModels, METH_VARARGS | METH_KEYWORDS,
""},
3616 {
"getParentRegister", (PyCFunction)TritonContext_getParentRegister, METH_O,
""},
3617 {
"getParentRegisters", (PyCFunction)TritonContext_getParentRegisters, METH_NOARGS,
""},
3618 {
"getPathConstraints", (PyCFunction)TritonContext_getPathConstraints, METH_NOARGS,
""},
3619 {
"getPathPredicate", (PyCFunction)TritonContext_getPathPredicate, METH_NOARGS,
""},
3620 {
"getPathPredicateSize", (PyCFunction)TritonContext_getPathPredicateSize, METH_NOARGS,
""},
3621 {
"getPredicatesToReachAddress", (PyCFunction)TritonContext_getPredicatesToReachAddress, METH_O,
""},
3622 {
"getRegister", (PyCFunction)TritonContext_getRegister, METH_O,
""},
3623 {
"getRegisterAst", (PyCFunction)TritonContext_getRegisterAst, METH_O,
""},
3624 {
"getSolver", (PyCFunction)TritonContext_getSolver, METH_NOARGS,
""},
3625 {
"getSymbolicExpression", (PyCFunction)TritonContext_getSymbolicExpression, METH_O,
""},
3626 {
"getSymbolicExpressions", (PyCFunction)TritonContext_getSymbolicExpressions, METH_NOARGS,
""},
3627 {
"getSymbolicMemory", (PyCFunction)TritonContext_getSymbolicMemory, METH_VARARGS,
""},
3628 {
"getSymbolicMemoryValue", (PyCFunction)TritonContext_getSymbolicMemoryValue, METH_O,
""},
3629 {
"getSymbolicRegister", (PyCFunction)TritonContext_getSymbolicRegister, METH_O,
""},
3630 {
"getSymbolicRegisterValue", (PyCFunction)TritonContext_getSymbolicRegisterValue, METH_O,
""},
3631 {
"getSymbolicRegisters", (PyCFunction)TritonContext_getSymbolicRegisters, METH_NOARGS,
""},
3632 {
"getSymbolicVariable", (PyCFunction)TritonContext_getSymbolicVariable, METH_O,
""},
3633 {
"getSymbolicVariables", (PyCFunction)TritonContext_getSymbolicVariables, METH_NOARGS,
""},
3634 {
"getTaintedMemory", (PyCFunction)TritonContext_getTaintedMemory, METH_NOARGS,
""},
3635 {
"getTaintedRegisters", (PyCFunction)TritonContext_getTaintedRegisters, METH_NOARGS,
""},
3636 {
"getTaintedSymbolicExpressions", (PyCFunction)TritonContext_getTaintedSymbolicExpressions, METH_NOARGS,
""},
3637 {
"initLeaAst", (PyCFunction)TritonContext_initLeaAst, METH_O,
""},
3638 {
"isArchitectureValid", (PyCFunction)TritonContext_isArchitectureValid, METH_NOARGS,
""},
3639 {
"isConcreteMemoryValueDefined", (PyCFunction)TritonContext_isConcreteMemoryValueDefined, METH_VARARGS,
""},
3640 {
"isFlag", (PyCFunction)TritonContext_isFlag, METH_O,
""},
3641 {
"isMemorySymbolized", (PyCFunction)TritonContext_isMemorySymbolized, METH_O,
""},
3642 {
"isMemoryTainted", (PyCFunction)TritonContext_isMemoryTainted, METH_O,
""},
3643 {
"isModeEnabled", (PyCFunction)TritonContext_isModeEnabled, METH_O,
""},
3644 {
"isRegister", (PyCFunction)TritonContext_isRegister, METH_O,
""},
3645 {
"isRegisterSymbolized", (PyCFunction)TritonContext_isRegisterSymbolized, METH_O,
""},
3646 {
"isRegisterTainted", (PyCFunction)TritonContext_isRegisterTainted, METH_O,
""},
3647 {
"isRegisterValid", (PyCFunction)TritonContext_isRegisterValid, METH_O,
""},
3648 {
"isSat", (PyCFunction)TritonContext_isSat, METH_O,
""},
3649 {
"isSymbolicExpressionExists", (PyCFunction)TritonContext_isSymbolicExpressionExists, METH_O,
""},
3650 {
"isThumb", (PyCFunction)TritonContext_isThumb, METH_NOARGS,
""},
3651 {
"liftToDot", (PyCFunction)TritonContext_liftToDot, METH_O,
""},
3652 {
"liftToLLVM", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_liftToLLVM, METH_VARARGS | METH_KEYWORDS,
""},
3653 {
"liftToPython", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_liftToPython, METH_VARARGS | METH_KEYWORDS,
""},
3654 {
"liftToSMT", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_liftToSMT, METH_VARARGS | METH_KEYWORDS,
""},
3655 {
"newSymbolicExpression", (PyCFunction)TritonContext_newSymbolicExpression, METH_VARARGS,
""},
3656 {
"newSymbolicVariable", (PyCFunction)TritonContext_newSymbolicVariable, METH_VARARGS,
""},
3657 {
"popPathConstraint", (PyCFunction)TritonContext_popPathConstraint, METH_NOARGS,
""},
3658 {
"processing", (PyCFunction)TritonContext_processing, METH_VARARGS,
""},
3659 {
"pushPathConstraint", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_pushPathConstraint, METH_VARARGS | METH_KEYWORDS,
""},
3660 {
"removeCallback", (PyCFunction)TritonContext_removeCallback, METH_VARARGS,
""},
3661 {
"reset", (PyCFunction)TritonContext_reset, METH_NOARGS,
""},
3662 {
"setArchitecture", (PyCFunction)TritonContext_setArchitecture, METH_O,
""},
3663 {
"setAstRepresentationMode", (PyCFunction)TritonContext_setAstRepresentationMode, METH_O,
""},
3664 {
"setConcreteMemoryAreaValue", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_setConcreteMemoryAreaValue, METH_VARARGS | METH_KEYWORDS,
""},
3665 {
"setConcreteMemoryValue", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_setConcreteMemoryValue, METH_VARARGS | METH_KEYWORDS,
""},
3666 {
"setConcreteRegisterValue", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_setConcreteRegisterValue, METH_VARARGS | METH_KEYWORDS,
""},
3667 {
"setConcreteVariableValue", (PyCFunction)TritonContext_setConcreteVariableValue, METH_VARARGS,
""},
3668 {
"setMode", (PyCFunction)TritonContext_setMode, METH_VARARGS,
""},
3669 {
"setSolver", (PyCFunction)TritonContext_setSolver, METH_O,
""},
3670 {
"setSolverMemoryLimit", (PyCFunction)TritonContext_setSolverMemoryLimit, METH_O,
""},
3671 {
"setSolverTimeout", (PyCFunction)TritonContext_setSolverTimeout, METH_O,
""},
3672 {
"setTaintMemory", (PyCFunction)TritonContext_setTaintMemory, METH_VARARGS,
""},
3673 {
"setTaintRegister", (PyCFunction)TritonContext_setTaintRegister, METH_VARARGS,
""},
3674 {
"setThumb", (PyCFunction)TritonContext_setThumb, METH_O,
""},
3675 {
"simplify", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_simplify, METH_VARARGS | METH_KEYWORDS,
""},
3676 {
"sliceExpressions", (PyCFunction)TritonContext_sliceExpressions, METH_O,
""},
3677 {
"symbolizeExpression", (PyCFunction)TritonContext_symbolizeExpression, METH_VARARGS,
""},
3678 {
"symbolizeMemory", (PyCFunction)TritonContext_symbolizeMemory, METH_VARARGS,
""},
3679 {
"symbolizeRegister", (PyCFunction)TritonContext_symbolizeRegister, METH_VARARGS,
""},
3680 {
"synthesize", (PyCFunction)(
void*)(PyCFunctionWithKeywords)TritonContext_synthesize, METH_VARARGS | METH_KEYWORDS,
""},
3681 {
"taintAssignment", (PyCFunction)TritonContext_taintAssignment, METH_VARARGS,
""},
3682 {
"taintMemory", (PyCFunction)TritonContext_taintMemory, METH_O,
""},
3683 {
"taintRegister", (PyCFunction)TritonContext_taintRegister, METH_O,
""},
3684 {
"taintUnion", (PyCFunction)TritonContext_taintUnion, METH_VARARGS,
""},
3685 {
"untaintMemory", (PyCFunction)TritonContext_untaintMemory, METH_O,
""},
3686 {
"untaintRegister", (PyCFunction)TritonContext_untaintRegister, METH_O,
""},
3687 {
nullptr,
nullptr, 0,
nullptr}
3693 PyVarObject_HEAD_INIT(&PyType_Type, 0)
3697 (destructor)TritonContext_dealloc,
3709 (getattrofunc)TritonContext_getattro,
3713 "TritonContext objects",
3758 if (
object !=
nullptr) {
3760 object->ref =
false;
3761 object->regAttr =
nullptr;
3764 return (PyObject*)object;
3772 if (
object !=
nullptr) {
3774 object->ref =
false;
3775 object->regAttr =
nullptr;
3778 return (PyObject*)object;
3786 if (
object !=
nullptr) {
3789 object->regAttr =
nullptr;
3792 return (PyObject*)object;
This is the main Triton Context class.
This class is used to represent an instruction.
This class is used to represent a memory access.
This class is used when an instruction has a register operand.
The exception class used by callbacks.
The root class of all exceptions.
TRITON_EXPORT const char * what() const
Returns the exception message.
register_e
Types of register.
std::shared_ptr< triton::ast::AbstractNode > SharedAbstractNode
Shared Abstract Node.
constexpr triton::uint32 flag
flag size in bit
ComparableFunctor< void(triton::Context &, const triton::arch::Register &)> getConcreteRegisterValueCallback
The prototype of a GET_CONCRETE_REGISTER_VALUE callback.
ComparableFunctor< triton::ast::SharedAbstractNode(triton::Context &, const triton::ast::SharedAbstractNode &)> symbolicSimplificationCallback
The prototype of a SYMBOLIC_SIMPLIFICATION callback.
ComparableFunctor< void(triton::Context &, const triton::arch::Register &, const triton::uint512 &value)> setConcreteRegisterValueCallback
The prototype of a SET_CONCRETE_REGISTER_VALUE callback.
ComparableFunctor< void(triton::Context &, const triton::arch::MemoryAccess &, const triton::uint512 &value)> setConcreteMemoryValueCallback
The prototype of a SET_CONCRETE_MEMORY_VALUE callback.
ComparableFunctor< void(triton::Context &, const triton::arch::MemoryAccess &)> getConcreteMemoryValueCallback
The prototype of a GET_CONCRETE_MEMORY_VALUE callback.
@ SYMBOLIC_SIMPLIFICATION
@ GET_CONCRETE_REGISTER_VALUE
@ GET_CONCRETE_MEMORY_VALUE
@ SET_CONCRETE_MEMORY_VALUE
@ SET_CONCRETE_REGISTER_VALUE
mode_e
Enumerates all kinds of mode.
PyObject * PyTritonContextRef(triton::Context &ctx)
Creates a TritonContext python class which is a reference to another Context.
PyObject * xPyClass_New(PyObject *b, PyObject *d, PyObject *n)
Creates a PyClass and raises an exception if it fails. dict is copied in Py3 ! All references are dec...
PyObject * PyPathConstraint(const triton::engines::symbolic::PathConstraint &pc)
Creates the PathConstraint python class.
PyObject * PySymbolicVariable(const triton::engines::symbolic::SharedSymbolicVariable &symVar)
Creates the SymbolicVariable python class.
PyObject * PySolverModel(const triton::engines::solver::SolverModel &model)
Creates the SolverModel python class.
triton::uint64 PyLong_AsUint64(PyObject *vv)
Returns a triton::uint64 from a pyObject.
PyObject * PyLong_FromUsize(triton::usize value)
Returns a pyObject from a triton::usize.
PyObject * xPyTuple_New(Py_ssize_t len)
Creates a PyTuple and raises an exception if it fails.
PyObject * xPyString_FromString(const char *v)
Creates a PyString and raises an exception if it fails.
bool PyLong_AsBool(PyObject *obj)
Returns a bool from a pyObject.
PyObject * PyLong_FromUint512(triton::uint512 value)
Returns a pyObject from a triton::uint512.
triton::uint512 PyLong_AsUint512(PyObject *vv)
Returns a triton::uint512 from a pyObject.
PyObject * PyAstContext(const triton::ast::SharedAstContext &actx)
Creates an AstContext python class.
PyObject * PyBasicBlock(void)
Creates the BasicBlock python class.
PyObject * PyInstruction(void)
Creates the Instruction python class.
PyObject * xPyList_New(Py_ssize_t len)
Creates a PyList and raises an exception if it fails.
int xPyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)
Same as PyDict_SetItem but decrements reference on object and key.
PyObject * PyLong_FromUint64(triton::uint64 value)
Returns a pyObject from a triton::uint64.
PyObject * PyRegister(const triton::arch::Register ®)
Creates the Register python class.
PyObject * PyTritonContext(void)
Creates the new TritonContext python class.
triton::uint32 PyLong_AsUint32(PyObject *vv)
Returns a triton::uint32 from a pyObject.
triton::usize PyLong_AsUsize(PyObject *vv)
Returns a triton::usize from a pyObject.
PyObject * PySymbolicExpression(const triton::engines::symbolic::SharedSymbolicExpression &symExpr)
Creates the SymbolicExpression python class.
PyObject * PyMemoryAccess(const triton::arch::MemoryAccess &mem)
Creates the Memory python class.
PyObject * xPyDict_New(void)
Creates a PyDict and raises an exception if it fails.
PyObject * PyLong_FromUint32(triton::uint32 value)
Returns a pyObject from a triton::uint32.
PyObject * PyAstNode(const triton::ast::SharedAbstractNode &node)
Creates the AstNode python class.
mode_e
All types of representation mode.
std::shared_ptr< triton::engines::symbolic::SymbolicExpression > SharedSymbolicExpression
Shared Symbolic Expression.
std::size_t usize
unsigned MAX_INT 32 or 64 bits according to the CPU.
std::uint64_t uint64
unisgned 64-bits
std::uint32_t uint32
unisgned 32-bits
std::uint8_t uint8
unisgned 8-bits
PyTypeObject TritonContext_Type
Description of the python representation of a TritonContext.
PyMethodDef TritonContext_callbacks[]
TritonContext methods.
#define PySymbolicVariable_Check(v)
#define PyImmediate_Check(v)
#define PyRegister_AsRegister(v)
#define PyMemoryAccess_Check(v)
#define PyTritonContext_AsTritonContext(v)
#define PyInstruction_AsInstruction(v)
#define PyImmediate_AsImmediate(v)
#define PyInstruction_Check(v)
#define PyAstNode_Check(v)
#define PyMemoryAccess_AsMemoryAccess(v)
#define PyBasicBlock_AsBasicBlock(v)
#define PyRegister_Check(v)
#define PyBasicBlock_Check(v)
#define PySymbolicExpression_Check(v)
#define PySymbolicVariable_AsSymbolicVariable(v)
#define PyAstNode_AsAstNode(v)
#define PySymbolicExpression_AsSymbolicExpression(v)