Пример #1
0
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;
}
Пример #2
0
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));
}
Пример #3
0
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");
}
Пример #4
0
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));
}
Пример #5
0
static PyObject *SymbolicVariable_getConcreteValue(PyObject *self, PyObject *noarg) {
  SymbolicVariable *symVar = PySymbolicVariable_AsSymbolicVariable(self);
  return uint128ToPyLongObject(symVar->getConcreteValue());
}