1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#include <Python.h>
#include "structmember.h"
#include <stdint.h>
#include <inttypes.h>
#include "queue.h"
#include "vm_mngr.h"
#include "vm_mngr_py.h"
#include "JitCore.h"
void JitCpu_dealloc(JitCpu* self)
{
self->ob_type->tp_free((PyObject*)self);
}
PyObject * JitCpu_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
JitCpu *self;
self = (JitCpu *)type->tp_alloc(type, 0);
return (PyObject *)self;
}
PyObject * JitCpu_get_vmmngr(JitCpu *self, void *closure)
{
if (self->pyvm) {
Py_INCREF(self->pyvm);
return (PyObject*)self->pyvm;
}
Py_INCREF(Py_None);
return Py_None;
}
PyObject * JitCpu_set_vmmngr(JitCpu *self, PyObject *value, void *closure)
{
self->pyvm = (VmMngr*)value;
return 0;
}
PyObject * JitCpu_get_jitter(JitCpu *self, void *closure)
{
if (self->jitter) {
Py_INCREF(self->jitter);
return self->jitter;
}
Py_INCREF(Py_None);
return Py_None;
}
PyObject * JitCpu_set_jitter(JitCpu *self, PyObject *value, void *closure)
{
self->jitter = value;
return 0;
}
uint8_t __attribute__((weak)) MEM_LOOKUP_08(JitCpu* jitcpu, uint64_t addr)
{
return vm_MEM_LOOKUP_08(&(jitcpu->pyvm->vm_mngr), addr);
}
uint16_t __attribute__((weak)) MEM_LOOKUP_16(JitCpu* jitcpu, uint64_t addr)
{
return vm_MEM_LOOKUP_16(&(jitcpu->pyvm->vm_mngr), addr);
}
uint32_t __attribute__((weak)) MEM_LOOKUP_32(JitCpu* jitcpu, uint64_t addr)
{
return vm_MEM_LOOKUP_32(&(jitcpu->pyvm->vm_mngr), addr);
}
uint64_t __attribute__((weak)) MEM_LOOKUP_64(JitCpu* jitcpu, uint64_t addr)
{
return vm_MEM_LOOKUP_64(&(jitcpu->pyvm->vm_mngr), addr);
}
void __attribute__((weak)) MEM_WRITE_08(JitCpu* jitcpu, uint64_t addr, uint8_t src)
{
vm_MEM_WRITE_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
}
void __attribute__((weak)) MEM_WRITE_16(JitCpu* jitcpu, uint64_t addr, uint16_t src)
{
vm_MEM_WRITE_16(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
}
void __attribute__((weak)) MEM_WRITE_32(JitCpu* jitcpu, uint64_t addr, uint32_t src)
{
vm_MEM_WRITE_32(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
}
void __attribute__((weak)) MEM_WRITE_64(JitCpu* jitcpu, uint64_t addr, uint64_t src)
{
vm_MEM_WRITE_64(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
}
PyObject* __attribute__((weak)) vm_get_mem(JitCpu *self, PyObject* args)
{
PyObject *py_addr;
PyObject *py_len;
uint64_t addr;
uint64_t size;
PyObject *obj_out;
char * buf_out;
int ret;
if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_len))
return NULL;
PyGetInt(py_addr, addr);
PyGetInt(py_len, size);
ret = vm_read_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, &buf_out, size);
if (ret < 0) {
PyErr_SetString(PyExc_RuntimeError, "cannot find address");
return NULL;
}
obj_out = PyString_FromStringAndSize(buf_out, size);
free(buf_out);
return obj_out;
}
|