2015-04-20 14:26:30 +02:00
|
|
|
#include "py_dbg.hpp"
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_getthreadsregbase(PyObject * /*self*/, PyObject *args)
|
|
|
|
{
|
|
|
|
PyObject *py_tid, *py_sreg_value;
|
|
|
|
if ( !PyArg_ParseTuple(args, "OO", &py_tid, &py_sreg_value) )
|
|
|
|
return NULL;
|
|
|
|
return dbg_get_thread_sreg_base(py_tid, py_sreg_value);
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_readmemory(PyObject * /*self*/, PyObject *args)
|
|
|
|
{
|
|
|
|
PyObject *py_ea, *py_size;
|
|
|
|
if ( !PyArg_ParseTuple(args, "OO", &py_ea, &py_size) )
|
|
|
|
return NULL;
|
|
|
|
return dbg_read_memory(py_ea, py_size);
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_writememory(PyObject * /*self*/, PyObject *args)
|
|
|
|
{
|
|
|
|
PyObject *py_ea, *py_buf;
|
|
|
|
if ( !PyArg_ParseTuple(args, "OO", &py_ea, &py_buf) )
|
|
|
|
return NULL;
|
|
|
|
return dbg_write_memory(py_ea, py_buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_getmeminfo(PyObject * /*self*/, PyObject *args)
|
|
|
|
{
|
|
|
|
return dbg_get_memory_info();
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_getregs(PyObject *self, PyObject *args)
|
|
|
|
{
|
|
|
|
return dbg_get_registers();
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_appcall(PyObject * /*self*/, PyObject *args)
|
|
|
|
{
|
|
|
|
PyObject *app_args, *type, *fields;
|
|
|
|
int func_ea, tid;
|
|
|
|
if ( !PyArg_ParseTuple(args, "iiOOO", &func_ea, &tid, &type, &fields, &app_args) )
|
|
|
|
return NULL;
|
|
|
|
return py_appcall(func_ea, tid, type, fields, app_args);
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyObject *ex_pytoidc(
|
|
|
|
PyObject *self,
|
|
|
|
PyObject *args)
|
|
|
|
{
|
|
|
|
if ( !PyArg_ParseTuple(args, "O", &self) )
|
|
|
|
return NULL;
|
|
|
|
idc_value_t v;
|
|
|
|
int sn = 0;
|
|
|
|
borref_t self_ref(self);
|
|
|
|
if ( pyvar_to_idcvar(self_ref, &v, &sn) < CIP_OK )
|
|
|
|
Py_RETURN_NONE;
|
|
|
|
Py_RETURN_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
static PyMethodDef py_methods_dbg[] =
|
|
|
|
{
|
|
|
|
{"getregs", ex_getregs, METH_VARARGS, ""},
|
|
|
|
{"getmeminfo", ex_getmeminfo, METH_VARARGS, ""},
|
|
|
|
{"readmemory", ex_readmemory, METH_VARARGS, ""},
|
|
|
|
{"writememory", ex_writememory, METH_VARARGS, ""},
|
|
|
|
{"getthreadsregbase", ex_getthreadsregbase, METH_VARARGS, ""},
|
|
|
|
{"appcall", ex_appcall, METH_VARARGS, ""},
|
|
|
|
{"pytoidc", ex_pytoidc, METH_VARARGS, ""},
|
|
|
|
{NULL, NULL, 0, NULL} /* Sentinel */
|
|
|
|
};
|
|
|
|
DRIVER_INIT_METHODS(dbg);
|