static PyObject *Triton_setRegValue(PyObject *self, PyObject *args) { PyObject *reg; PyObject *value; uint128 va; uint64 tr; /* Extract arguments */ PyArg_ParseTuple(args, "O|O", ®, &value); if (!PyLong_Check(reg) && !PyInt_Check(reg)) return PyErr_Format(PyExc_TypeError, "setRegValue(): expected an IDREF.REG as first argument"); if (!PyLong_Check(value) && !PyInt_Check(value)) return PyErr_Format(PyExc_TypeError, "setRegValue(): expected an integer as second argument"); va = PyLongObjectToUint128(value); tr = PyLong_AsLong(reg); if (tr >= ID_XMM0 && tr <= ID_XMM15) ap.setSSERegisterValue(tr, va); else ap.setRegisterValue(tr, va); return Py_None; }
static PyObject *Triton_setRegValue(PyObject *self, PyObject *args) { PyObject *reg = nullptr; PyObject *value = nullptr; uint128 va; uint64 tr; /* Extract arguments */ PyArg_ParseTuple(args, "|OO", ®, &value); if (reg == nullptr || (!PyLong_Check(reg) && !PyInt_Check(reg))) return PyErr_Format(PyExc_TypeError, "setRegValue(): expected an IDREF.REG as first argument"); if (value == nullptr || (!PyLong_Check(value) && !PyInt_Check(value))) return PyErr_Format(PyExc_TypeError, "setRegValue(): expected an integer as second argument"); va = PyLongObjectToUint128(value); tr = PyLong_AsLongLong(reg); RegisterOperand ro = createTmpReg(tr); if (isSSERegId(tr)) ap.setSSERegisterValue(ro, va); else ap.setRegisterValue(ro, boost::numeric_cast<uint64>(va)); Py_INCREF(Py_None); return Py_None; }
static PyObject *Triton_setMemValue(PyObject *self, PyObject *args) { PyObject *addr; PyObject *value; PyObject *writeSize; uint128 va; // value uint64 ad; // address uint64 ws; // write size /* Extract arguments */ PyArg_ParseTuple(args, "O|O|O", &addr, &writeSize, &value); if (!PyLong_Check(addr) && !PyInt_Check(addr)) return PyErr_Format(PyExc_TypeError, "setMemValue(): expected an address (integer) as first argument"); if (!PyLong_Check(writeSize) && !PyInt_Check(writeSize)) return PyErr_Format(PyExc_TypeError, "setMemValue(): expected an integer as second argument"); if (!PyLong_Check(value) && !PyInt_Check(value)) return PyErr_Format(PyExc_TypeError, "setMemValue(): expected an integer as third argument"); ad = PyLong_AsLong(addr); ws = PyLong_AsLong(writeSize); if (ws != DQWORD_SIZE && ws != QWORD_SIZE && ws != DWORD_SIZE && ws != WORD_SIZE && ws != BYTE_SIZE) return PyErr_Format(PyExc_TypeError, "setMemValue(): The writeSize argument must be: DQWORD, QWORD, DWORD, WORD or BYTE"); if (PIN_CheckWriteAccess(reinterpret_cast<void*>(ad)) == false) return PyErr_Format(PyExc_TypeError, "setMemValue(): Can not write into the targeted address memory"); va = PyLongObjectToUint128(value); ap.setMemValue(ad, ws, va); return Py_None; }
static PyObject *smt2lib_bv(PyObject *self, PyObject *args) { PyObject *op1 = nullptr; PyObject *op2 = nullptr; /* Extract arguments */ PyArg_ParseTuple(args, "|OO", &op1, &op2); if (op1 == nullptr || (!PyLong_Check(op1) && !PyInt_Check(op1))) return PyErr_Format(PyExc_TypeError, "bv(): expected an integer as first argument"); if (op2 == nullptr || (!PyLong_Check(op2) && !PyInt_Check(op2))) return PyErr_Format(PyExc_TypeError, "bv(): expected an integer as second argument"); return PySmtAstNode(smt2lib::bv(PyLongObjectToUint128(op1), PyLong_AsLongLong(op2))); }