#include <Python.h>
#include "../JitCore.h"
#include "structmember.h"
#include <stdint.h>
#include <inttypes.h>
#include "../queue.h"
#include "../vm_mngr.h"
#include "../vm_mngr_py.h"
#include "JitCore_arm.h"
Go to the source code of this file.
|
PyObject * | cpu_get_gpreg (JitCpu *self) |
|
PyObject * | cpu_set_gpreg (JitCpu *self, PyObject *args) |
|
PyObject * | cpu_init_regs (JitCpu *self) |
|
void | dump_gpregs (vm_cpu_t *vmcpu) |
|
PyObject * | cpu_dump_gpregs (JitCpu *self, PyObject *args) |
|
PyObject * | cpu_set_exception (JitCpu *self, PyObject *args) |
|
PyObject * | cpu_get_exception (JitCpu *self, PyObject *args) |
|
void | check_automod (JitCpu *jitcpu, uint64_t addr, uint64_t size) |
|
void | MEM_WRITE_08 (JitCpu *jitcpu, uint64_t addr, uint8_t src) |
|
void | MEM_WRITE_16 (JitCpu *jitcpu, uint64_t addr, uint16_t src) |
|
void | MEM_WRITE_32 (JitCpu *jitcpu, uint64_t addr, uint32_t src) |
|
void | MEM_WRITE_64 (JitCpu *jitcpu, uint64_t addr, uint64_t src) |
|
PyObject * | vm_set_mem (JitCpu *self, PyObject *args) |
|
static int | JitCpu_init (JitCpu *self, PyObject *args, PyObject *kwds) |
|
| getset_reg_u32 (R0) |
|
| getset_reg_u32 (R1) |
|
| getset_reg_u32 (R2) |
|
| getset_reg_u32 (R3) |
|
| getset_reg_u32 (R4) |
|
| getset_reg_u32 (R5) |
|
| getset_reg_u32 (R6) |
|
| getset_reg_u32 (R7) |
|
| getset_reg_u32 (R8) |
|
| getset_reg_u32 (R9) |
|
| getset_reg_u32 (R10) |
|
| getset_reg_u32 (R11) |
|
| getset_reg_u32 (R12) |
|
| getset_reg_u32 (SP) |
|
| getset_reg_u32 (LR) |
|
| getset_reg_u32 (PC) |
|
| getset_reg_u32 (zf) |
|
| getset_reg_u32 (nf) |
|
| getset_reg_u32 (of) |
|
| getset_reg_u32 (cf) |
|
PyObject * | get_gpreg_offset_all (void) |
|
PyMODINIT_FUNC | initJitCore_arm (void) |
|
void check_automod |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint64_t |
size |
|
) |
| |
Definition at line 168 of file JitCore_arm.c.
174 result = PyObject_CallMethod(jitcpu->
jitter,
"automod_cb",
"LL", addr, size);
#define EXCEPT_CODE_AUTOMOD
PyObject_HEAD PyObject * pyvm
PyObject* cpu_dump_gpregs |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
PyObject* cpu_get_exception |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 159 of file JitCore_arm.c.
161 return PyLong_FromUnsignedLongLong((uint64_t)(((
vm_cpu_t*)self->
cpu)->exception_flags));
PyObject* cpu_get_gpreg |
( |
JitCpu * |
self | ) |
|
Definition at line 41 of file JitCore_arm.c.
43 PyObject *dict = PyDict_New();
PyObject* cpu_init_regs |
( |
JitCpu * |
self | ) |
|
PyObject* cpu_set_exception |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 144 of file JitCore_arm.c.
149 if (!PyArg_ParseTuple(args,
"O", &item1))
#define PyGetInt(item, value)
PyObject* cpu_set_gpreg |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 73 of file JitCore_arm.c.
76 PyObject *d_key, *d_value = NULL;
79 unsigned int i, found;
81 if (!PyArg_ParseTuple(args,
"O", &dict))
83 if(!PyDict_Check(dict))
84 RAISE(PyExc_TypeError,
"arg must be dict");
85 while(PyDict_Next(dict, &pos, &d_key, &d_value)){
86 if(!PyString_Check(d_key))
87 RAISE(PyExc_TypeError,
"key must be str");
102 fprintf(stderr,
"unkown key: %s\n", PyString_AsString(d_key));
103 RAISE(PyExc_ValueError,
"unkown reg");
#define RAISE(errtype, msg)
#define PyGetInt(item, value)
Definition at line 118 of file JitCore_arm.c.
120 printf(
"R0 %.16"PRIX32
" R1 %.16"PRIX32
" R2 %.16"PRIX32
" R3 %.16"PRIX32
"\n",
121 vmcpu->
R0, vmcpu->
R1, vmcpu->
R2, vmcpu->
R3);
122 printf(
"R4 %.16"PRIX32
" R5 %.16"PRIX32
" R6 %.16"PRIX32
" R7 %.16"PRIX32
"\n",
123 vmcpu->
R4, vmcpu->
R5, vmcpu->
R6, vmcpu->
R7);
124 printf(
"R8 %.16"PRIX32
" R9 %.16"PRIX32
" R10 %.16"PRIX32
" R11 %.16"PRIX32
"\n",
125 vmcpu->
R8, vmcpu->
R9, vmcpu->
R10, vmcpu->
R11);
126 printf(
"R12 %.16"PRIX32
" SP %.16"PRIX32
" LR %.16"PRIX32
" PC %.16"PRIX32
"\n",
127 vmcpu->
R12, vmcpu->
SP, vmcpu->
LR, vmcpu->
PC);
128 printf(
"zf %.16"PRIX32
" nf %.16"PRIX32
" of %.16"PRIX32
" cf %.16"PRIX32
"\n",
129 vmcpu->
zf, vmcpu->
nf, vmcpu->
of, vmcpu->
cf);
PyObject* get_gpreg_offset_all |
( |
void |
| ) |
|
Definition at line 297 of file JitCore_arm.c.
299 PyObject *dict = PyDict_New();
PyMODINIT_FUNC initJitCore_arm |
( |
void |
| ) |
|
Definition at line 539 of file JitCore_arm.c.
555 PyModule_AddObject(m,
"JitCpu", (PyObject *)&
JitCpuType);
static PyMethodDef JitCore_arm_Methods[]
static PyTypeObject JitCpuType
static PyObject * JitCore_arm_Error
static int JitCpu_init |
( |
JitCpu * |
self, |
|
|
PyObject * |
args, |
|
|
PyObject * |
kwds |
|
) |
| |
|
static |
Definition at line 264 of file JitCore_arm.c.
266 self->cpu = malloc(
sizeof(
vm_cpu_t));
267 if (self->
cpu == NULL) {
268 fprintf(stderr,
"cannot alloc vm_cpu_t\n");
void MEM_WRITE_08 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint8_t |
src |
|
) |
| |
Definition at line 179 of file JitCore_arm.c.
PyObject_HEAD PyObject * pyvm
void vm_MEM_WRITE_08(vm_mngr_t *vm_mngr, uint64_t addr, unsigned char src)
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
void MEM_WRITE_16 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint16_t |
src |
|
) |
| |
Definition at line 185 of file JitCore_arm.c.
void vm_MEM_WRITE_16(vm_mngr_t *vm_mngr, uint64_t addr, unsigned short src)
PyObject_HEAD PyObject * pyvm
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
void MEM_WRITE_32 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint32_t |
src |
|
) |
| |
Definition at line 191 of file JitCore_arm.c.
PyObject_HEAD PyObject * pyvm
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
void vm_MEM_WRITE_32(vm_mngr_t *vm_mngr, uint64_t addr, unsigned int src)
void MEM_WRITE_64 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint64_t |
src |
|
) |
| |
Definition at line 197 of file JitCore_arm.c.
void vm_MEM_WRITE_64(vm_mngr_t *vm_mngr, uint64_t addr, uint64_t src)
PyObject_HEAD PyObject * pyvm
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
PyObject* vm_set_mem |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 208 of file JitCore_arm.c.
212 Py_ssize_t py_length;
219 if (!PyArg_ParseTuple(args,
"OO", &py_addr, &py_buffer))
224 if(!PyString_Check(py_buffer))
225 RAISE(PyExc_TypeError,
"arg must be str");
227 size = PyString_Size(py_buffer);
228 PyString_AsStringAndSize(py_buffer, &buffer, &py_length);
232 RAISE(PyExc_TypeError,
"arg must be str");
#define RAISE(errtype, msg)
#define PyGetInt(item, value)
int vm_write_mem(vm_mngr_t *vm_mngr, uint64_t addr, char *buffer, uint64_t size)
PyObject_HEAD PyObject * pyvm
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
PyObject* JitCore_arm_Error |
|
static |
PyMethodDef JitCore_arm_Methods[] |
|
static |
Initial value:= {
{NULL, NULL, 0, NULL}
}
PyObject * get_gpreg_offset_all(void)
Definition at line 526 of file JitCore_arm.c.
PyGetSetDef JitCpu_getseters[] |
|
static |
PyMemberDef JitCpu_members[] |
|
static |
PyMethodDef JitCpu_methods[] |
|
static |
Initial value:= {
"X"},
"X"},
"X"},
"X"},
"X"},
"X"},
{
"set_mem", (PyCFunction)
vm_set_mem, METH_VARARGS,
"X"},
{
"get_mem", (PyCFunction)
vm_get_mem, METH_VARARGS,
"X"},
{NULL}
}
PyObject * vm_get_mem(JitCpu *self, PyObject *args)
PyObject * cpu_init_regs(JitCpu *self)
PyObject * cpu_dump_gpregs(JitCpu *self, PyObject *args)
PyObject * cpu_get_gpreg(JitCpu *self)
PyObject * vm_set_mem(JitCpu *self, PyObject *args)
PyObject * cpu_set_exception(JitCpu *self, PyObject *args)
PyObject * cpu_set_gpreg(JitCpu *self, PyObject *args)
PyObject * cpu_get_exception(JitCpu *self, PyObject *args)
Definition at line 243 of file JitCore_arm.c.