#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_aarch64.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_u64 (X0) |
|
| getset_reg_u64 (X1) |
|
| getset_reg_u64 (X2) |
|
| getset_reg_u64 (X3) |
|
| getset_reg_u64 (X4) |
|
| getset_reg_u64 (X5) |
|
| getset_reg_u64 (X6) |
|
| getset_reg_u64 (X7) |
|
| getset_reg_u64 (X8) |
|
| getset_reg_u64 (X9) |
|
| getset_reg_u64 (X10) |
|
| getset_reg_u64 (X11) |
|
| getset_reg_u64 (X12) |
|
| getset_reg_u64 (X13) |
|
| getset_reg_u64 (X14) |
|
| getset_reg_u64 (X15) |
|
| getset_reg_u64 (X16) |
|
| getset_reg_u64 (X17) |
|
| getset_reg_u64 (X18) |
|
| getset_reg_u64 (X19) |
|
| getset_reg_u64 (X20) |
|
| getset_reg_u64 (X21) |
|
| getset_reg_u64 (X22) |
|
| getset_reg_u64 (X23) |
|
| getset_reg_u64 (X24) |
|
| getset_reg_u64 (X25) |
|
| getset_reg_u64 (X26) |
|
| getset_reg_u64 (X27) |
|
| getset_reg_u64 (X28) |
|
| getset_reg_u64 (X29) |
|
| getset_reg_u64 (LR) |
|
| getset_reg_u64 (SP) |
|
| getset_reg_u64 (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_aarch64 (void) |
|
void check_automod |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint64_t |
size |
|
) |
| |
Definition at line 215 of file JitCore_aarch64.c.
221 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 |
|
) |
| |
PyObject* cpu_get_gpreg |
( |
JitCpu * |
self | ) |
|
PyObject* cpu_init_regs |
( |
JitCpu * |
self | ) |
|
PyObject* cpu_set_exception |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 191 of file JitCore_aarch64.c.
196 if (!PyArg_ParseTuple(args,
"O", &item1))
#define PyGetInt(item, value)
PyObject* cpu_set_gpreg |
( |
JitCpu * |
self, |
|
|
PyObject * |
args |
|
) |
| |
Definition at line 109 of file JitCore_aarch64.c.
112 PyObject *d_key, *d_value = NULL;
115 unsigned int i, found;
117 if (!PyArg_ParseTuple(args,
"O", &dict))
119 if(!PyDict_Check(dict))
120 RAISE(PyExc_TypeError,
"arg must be dict");
121 while(PyDict_Next(dict, &pos, &d_key, &d_value)){
122 if(!PyString_Check(d_key))
123 RAISE(PyExc_TypeError,
"key must be str");
138 fprintf(stderr,
"unkown key: %s\n", PyString_AsString(d_key));
139 RAISE(PyExc_ValueError,
"unkown reg");
#define RAISE(errtype, msg)
#define PyGetInt(item, value)
Definition at line 154 of file JitCore_aarch64.c.
156 printf(
"X0 %.16"PRIX64
" X1 %.16"PRIX64
" X2 %.16"PRIX64
" X3 %.16"PRIX64
" "\
157 "X4 %.16"PRIX64
" X5 %.16"PRIX64
" X6 %.16"PRIX64
" X7 %.16"PRIX64
"\n",
158 vmcpu->
X0, vmcpu->
X1, vmcpu->
X2, vmcpu->
X3, vmcpu->
X4, vmcpu->
X5, vmcpu->
X6, vmcpu->
X7);
159 printf(
"X8 %.16"PRIX64
" X9 %.16"PRIX64
" X10 %.16"PRIX64
" X11 %.16"PRIX64
" "\
160 "X12 %.16"PRIX64
" X13 %.16"PRIX64
" X14 %.16"PRIX64
" X15 %.16"PRIX64
"\n",
163 printf(
"X16 %.16"PRIX64
" X17 %.16"PRIX64
" X18 %.16"PRIX64
" X19 %.16"PRIX64
" "\
164 "X20 %.16"PRIX64
" X21 %.16"PRIX64
" X22 %.16"PRIX64
" X23 %.16"PRIX64
"\n",
167 printf(
"X24 %.16"PRIX64
" X25 %.16"PRIX64
" X26 %.16"PRIX64
" X27 %.16"PRIX64
" "\
168 "X28 %.16"PRIX64
" X29 %.16"PRIX64
" LR %.16"PRIX64
"\n",
173 printf(
"SP %.16"PRIX64
" PC %.16"PRIX64
" "\
174 "zf %.16"PRIX32
" nf %.16"PRIX32
" of %.16"PRIX32
" cf %.16"PRIX32
"\n",
175 vmcpu->
SP, vmcpu->
PC,
176 vmcpu->
zf, vmcpu->
nf, vmcpu->
of, vmcpu->
cf);
PyObject* get_gpreg_offset_all |
( |
void |
| ) |
|
PyMODINIT_FUNC initJitCore_aarch64 |
( |
void |
| ) |
|
Definition at line 680 of file JitCore_aarch64.c.
696 PyModule_AddObject(m,
"JitCpu", (PyObject *)&
JitCpuType);
static PyTypeObject JitCpuType
static PyObject * JitCore_aarch64_Error
static PyMethodDef JitCore_aarch64_Methods[]
static int JitCpu_init |
( |
JitCpu * |
self, |
|
|
PyObject * |
args, |
|
|
PyObject * |
kwds |
|
) |
| |
|
static |
Definition at line 330 of file JitCore_aarch64.c.
332 self->cpu = malloc(
sizeof(
vm_cpu_t));
333 if (self->
cpu == NULL) {
334 fprintf(stderr,
"cannot alloc vm_cpu_t\n");
void MEM_WRITE_08 |
( |
JitCpu * |
jitcpu, |
|
|
uint64_t |
addr, |
|
|
uint8_t |
src |
|
) |
| |
Definition at line 226 of file JitCore_aarch64.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 232 of file JitCore_aarch64.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 238 of file JitCore_aarch64.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 244 of file JitCore_aarch64.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 255 of file JitCore_aarch64.c.
259 Py_ssize_t py_length;
266 if (!PyArg_ParseTuple(args,
"OO", &py_addr, &py_buffer))
271 if(!PyString_Check(py_buffer))
272 RAISE(PyExc_TypeError,
"arg must be str");
274 size = PyString_Size(py_buffer);
275 PyString_AsStringAndSize(py_buffer, &buffer, &py_length);
279 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_aarch64_Error |
|
static |
PyMethodDef JitCore_aarch64_Methods[] |
|
static |
Initial value:= {
{NULL, NULL, 0, NULL}
}
PyObject * get_gpreg_offset_all(void)
Definition at line 671 of file JitCore_aarch64.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_set_mem(JitCpu *self, PyObject *args)
PyObject * vm_get_mem(JitCpu *self, PyObject *args)
PyObject * cpu_set_exception(JitCpu *self, PyObject *args)
PyObject * cpu_init_regs(JitCpu *self)
PyObject * cpu_get_gpreg(JitCpu *self)
PyObject * cpu_get_exception(JitCpu *self, PyObject *args)
PyObject * cpu_set_gpreg(JitCpu *self, PyObject *args)
PyObject * cpu_dump_gpregs(JitCpu *self, PyObject *args)
Definition at line 309 of file JitCore_aarch64.c.