static PyObject *Triton_getRegs(PyObject *self, PyObject *noargs) { PyObject *regs = xPyDict_New(); /* Build all Registers */ for (uint64 regId = ID_RAX; regId < ID_RFLAGS; regId++){ PyObject *reg = xPyDict_New(); if (regId >= ID_XMM0 && regId <= ID_XMM15) PyDict_SetItemString(reg, "concreteValue", uint128ToPyLongObject(ap.getSSERegisterValue(regId))); else PyDict_SetItemString(reg, "concreteValue", Py_BuildValue("k", ap.getRegisterValue(regId))); PyDict_SetItemString(reg, "symbolicExpr", Py_BuildValue("k", ap.getRegSymbolicID(regId))); PyDict_SetItem(regs, Py_BuildValue("k", regId), reg); } /* Build all Flags */ for (uint64 flagId = ID_AF; flagId <= ID_ZF; flagId++){ PyObject *flag = xPyDict_New(); PyDict_SetItemString(flag, "concreteValue", Py_BuildValue("k", ap.getFlagValue(flagId))); PyDict_SetItemString(flag, "symbolicExpr", Py_BuildValue("k", ap.getRegSymbolicID(flagId))); PyDict_SetItem(regs, Py_BuildValue("k", flagId), flag); } return regs; }
static PyObject *Triton_getMemValue(PyObject *self, PyObject *args) { PyObject *addr; PyObject *readSize; uint64 ad; uint64 rs; /* Extract arguments */ PyArg_ParseTuple(args, "O|O", &addr, &readSize); if (!ap.getCurrentCtxH()) return PyErr_Format(PyExc_TypeError, "getMemValue(): Can't call getMemValue() right now. You must run the program before."); if (!PyLong_Check(addr) && !PyInt_Check(addr)) return PyErr_Format(PyExc_TypeError, "getMemValue(): expected an address (integer) as argument"); ad = PyLong_AsLong(addr); rs = PyLong_AsLong(readSize); if (rs != DQWORD_SIZE && rs != QWORD_SIZE && rs != DWORD_SIZE && rs != WORD_SIZE && rs != BYTE_SIZE) return PyErr_Format(PyExc_TypeError, "getMemValue(): The readSize argument must be: DQWORD, QWORD, DWORD, WORD or BYTE"); if (PIN_CheckReadAccess(reinterpret_cast<void*>(ad)) == false) return PyErr_Format(PyExc_TypeError, "getMemValue(): The targeted address memory can not be read"); /* If this is a 128-bits read size, we must use uint128ToPyLongObject() */ if (rs == DQWORD_SIZE){ uint128 value = ap.getMemValue(ad, rs); return uint128ToPyLongObject(value); } return Py_BuildValue("k", ap.getMemValue(ad, rs)); }
static PyObject *SmtAstNode_getValue(PyObject *self, PyObject *noarg) { smt2lib::smtAstAbstractNode *node = PySmtAstNode_AsSmtAstNode(self); if (node->getKind() == smt2lib::DECIMAL_NODE) return uint128ToPyLongObject(reinterpret_cast<smt2lib::smtAstDecimalNode *>(node)->getValue()); else if (node->getKind() == smt2lib::STRING_NODE) return Py_BuildValue("s", reinterpret_cast<smt2lib::smtAstStringNode *>(node)->getValue().c_str()); else if (node->getKind() == smt2lib::REFERENCE_NODE) return Py_BuildValue("k", reinterpret_cast<smt2lib::smtAstReferenceNode *>(node)->getValue()); return PyErr_Format(PyExc_TypeError, "SmtAstNode.getValue() - Cannot use getValue() on this kind of node"); }
static PyObject *Triton_getRegValue(PyObject *self, PyObject *reg) { uint64 tritonReg; if (!PyLong_Check(reg) && !PyInt_Check(reg)) return PyErr_Format(PyExc_TypeError, "getRegValue(): expected a register id (IDREF.REG) as argument"); if (!ap.getCurrentCtxH()) return PyErr_Format(PyExc_TypeError, "getRegValue(): Can't call getRegValue() right now. You must run the program before."); tritonReg = PyLong_AsLong(reg); if (tritonReg >= ID_XMM0 && tritonReg <= ID_XMM15){ uint128 value = ap.getSSERegisterValue(tritonReg); return uint128ToPyLongObject(value); } return Py_BuildValue("k", ap.getRegisterValue(tritonReg)); }
static PyObject *SymbolicVariable_getConcreteValue(PyObject *self, PyObject *noarg) { SymbolicVariable *symVar = PySymbolicVariable_AsSymbolicVariable(self); return uint128ToPyLongObject(symVar->getConcreteValue()); }