Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
Macros | Functions | Variables
JitCore_x86.c File Reference
#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_x86.h"
+ Include dependency graph for JitCore_x86.c:

Go to the source code of this file.

Macros

#define getset_reg_E_u32(regname)
 
#define getset_reg_R_u16(regname)
 

Functions

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)
 
PyObject * cpu_set_segm_base (JitCpu *self, PyObject *args)
 
PyObject * cpu_get_segm_base (JitCpu *self, PyObject *args)
 
uint64_t segm2addr (JitCpu *jitcpu, uint64_t segm, uint64_t addr)
 
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 (RAX)
 
 getset_reg_u64 (RBX)
 
 getset_reg_u64 (RCX)
 
 getset_reg_u64 (RDX)
 
 getset_reg_u64 (RSI)
 
 getset_reg_u64 (RDI)
 
 getset_reg_u64 (RSP)
 
 getset_reg_u64 (RBP)
 
 getset_reg_u64 (R8)
 
 getset_reg_u64 (R9)
 
 getset_reg_u64 (R10)
 
 getset_reg_u64 (R11)
 
 getset_reg_u64 (R12)
 
 getset_reg_u64 (R13)
 
 getset_reg_u64 (R14)
 
 getset_reg_u64 (R15)
 
 getset_reg_u64 (RIP)
 
 getset_reg_u64 (zf)
 
 getset_reg_u64 (nf)
 
 getset_reg_u64 (pf)
 
 getset_reg_u64 (of)
 
 getset_reg_u64 (cf)
 
 getset_reg_u64 (af)
 
 getset_reg_u64 (df)
 
 getset_reg_u64 (ES)
 
 getset_reg_u64 (CS)
 
 getset_reg_u64 (SS)
 
 getset_reg_u64 (DS)
 
 getset_reg_u64 (FS)
 
 getset_reg_u64 (GS)
 
 getset_reg_E_u32 (AX)
 
 getset_reg_E_u32 (BX)
 
 getset_reg_E_u32 (CX)
 
 getset_reg_E_u32 (DX)
 
 getset_reg_E_u32 (SI)
 
 getset_reg_E_u32 (DI)
 
 getset_reg_E_u32 (SP)
 
 getset_reg_E_u32 (BP)
 
 getset_reg_E_u32 (IP)
 
 getset_reg_R_u16 (AX)
 
 getset_reg_R_u16 (BX)
 
 getset_reg_R_u16 (CX)
 
 getset_reg_R_u16 (DX)
 
 getset_reg_R_u16 (SI)
 
 getset_reg_R_u16 (DI)
 
 getset_reg_R_u16 (SP)
 
 getset_reg_R_u16 (BP)
 
 getset_reg_R_u16 (IP)
 
PyObject * get_gpreg_offset_all (void)
 
PyMODINIT_FUNC initJitCore_x86 (void)
 

Variables

reg_dict gpreg_dict []
 
static PyMemberDef JitCpu_members []
 
static PyMethodDef JitCpu_methods []
 
static PyGetSetDef JitCpu_getseters []
 
static PyTypeObject JitCpuType
 
static PyMethodDef JitCore_x86_Methods []
 
static PyObject * JitCore_x86_Error
 

Macro Definition Documentation

#define getset_reg_E_u32 (   regname)
Value:
static PyObject *JitCpu_get_E ## regname (JitCpu *self, void *closure) \
{ \
return PyLong_FromUnsignedLongLong((uint32_t)(((vm_cpu_t*)(self->cpu))->R ## regname & 0xFFFFFFFF )); \
} \
static int JitCpu_set_E ## regname (JitCpu *self, PyObject *value, void *closure) \
{ \
uint64_t val; \
PyGetInt_ret0(value, val); \
val &= 0xFFFFFFFF; \
val |= ((vm_cpu_t*)(self->cpu))->R ##regname & 0xFFFFFFFF00000000ULL; \
((vm_cpu_t*)(self->cpu))->R ## regname = val; \
return 0; \
}
#define PyGetInt_ret0(item, value)
Definition: JitCore.h:20
Definition: JitCore.h:93

Definition at line 367 of file JitCore_x86.c.

#define getset_reg_R_u16 (   regname)
Value:
static PyObject *JitCpu_get_ ## regname (JitCpu *self, void *closure) \
{ \
return PyLong_FromUnsignedLongLong((uint16_t)(((vm_cpu_t*)(self->cpu))->R ## regname & 0xFFFF )); \
} \
static int JitCpu_set_ ## regname (JitCpu *self, PyObject *value, void *closure) \
{ \
uint64_t val; \
PyGetInt_ret0(value, val); \
val &= 0xFFFF; \
val |= ((vm_cpu_t*)(self->cpu))->R ##regname & 0xFFFFFFFFFFFF0000ULL; \
((vm_cpu_t*)(self->cpu))->R ## regname = val; \
return 0; \
}
#define PyGetInt_ret0(item, value)
Definition: JitCore.h:20
Definition: JitCore.h:93

Definition at line 384 of file JitCore_x86.c.

Function Documentation

void check_automod ( JitCpu jitcpu,
uint64_t  addr,
uint64_t  size 
)

Definition at line 259 of file JitCore_x86.c.

260 {
261  PyObject *result;
262 
263  if (!(((VmMngr*)jitcpu->pyvm)->vm_mngr.exception_flags & EXCEPT_CODE_AUTOMOD))
264  return;
265  result = PyObject_CallMethod(jitcpu->jitter, "automod_cb", "LL", addr, size);
266  Py_DECREF(result);
267 
268 }
#define EXCEPT_CODE_AUTOMOD
Definition: vm_mngr.h:130
PyObject * jitter
Definition: JitCore.h:96
PyObject_HEAD PyObject * pyvm
Definition: JitCore.h:95

+ Here is the caller graph for this function:

PyObject* cpu_dump_gpregs ( JitCpu self,
PyObject *  args 
)

Definition at line 169 of file JitCore_x86.c.

170 {
171  vm_cpu_t* vmcpu;
172 
173  vmcpu = self->cpu;
174  dump_gpregs(vmcpu);
175  Py_INCREF(Py_None);
176  return Py_None;
177 }
void dump_gpregs(vm_cpu_t *vmcpu)
Definition: JitCore_x86.c:155

+ Here is the call graph for this function:

PyObject* cpu_get_exception ( JitCpu self,
PyObject *  args 
)

Definition at line 195 of file JitCore_x86.c.

196 {
197  return PyLong_FromUnsignedLongLong((uint64_t)(((vm_cpu_t*)self->cpu)->exception_flags));
198 }
void * cpu
Definition: JitCore.h:97
PyObject* cpu_get_gpreg ( JitCpu self)

Definition at line 58 of file JitCore_x86.c.

59 {
60  PyObject *dict = PyDict_New();
61  PyObject *o;
62 
63  get_reg(RAX);
64  get_reg(RBX);
65  get_reg(RCX);
66  get_reg(RDX);
67  get_reg(RSI);
68  get_reg(RDI);
69  get_reg(RSP);
70  get_reg(RBP);
71 
72  get_reg(R8);
73  get_reg(R9);
74  get_reg(R10);
75  get_reg(R11);
76  get_reg(R12);
77  get_reg(R13);
78  get_reg(R14);
79  get_reg(R15);
80 
81  get_reg(RIP);
82 
83  get_reg(zf);
84  get_reg(nf);
85  get_reg(pf);
86  get_reg(of);
87  get_reg(cf);
88  get_reg(af);
89  get_reg(df);
90 
91 
92  get_reg(ES);
93  get_reg(CS);
94  get_reg(SS);
95  get_reg(DS);
96  get_reg(FS);
97  get_reg(GS);
98 
99  return dict;
100 }
#define get_reg(reg)
Definition: JitCore.h:74
PyObject* cpu_get_segm_base ( JitCpu self,
PyObject *  args 
)

Definition at line 220 of file JitCore_x86.c.

221 {
222  PyObject *item1;
223  uint64_t segm_num;
224  PyObject* v;
225 
226  if (!PyArg_ParseTuple(args, "O", &item1))
227  return NULL;
228  PyGetInt(item1, segm_num);
229  v = PyInt_FromLong((long)(((vm_cpu_t*)self->cpu)->segm_base[segm_num]));
230  return v;
231 }
#define PyGetInt(item, value)
Definition: JitCore.h:8
void * cpu
Definition: JitCore.h:97
PyObject* cpu_init_regs ( JitCpu self)

Definition at line 142 of file JitCore_x86.c.

143 {
144  memset(self->cpu, 0, sizeof(vm_cpu_t));
145 
146  ((vm_cpu_t*)self->cpu)->tsc1 = 0x22222222;
147  ((vm_cpu_t*)self->cpu)->tsc2 = 0x11111111;
148  ((vm_cpu_t*)self->cpu)->i_f = 1;
149 
150  Py_INCREF(Py_None);
151  return Py_None;
152 
153 }
void * cpu
Definition: JitCore.h:97
PyObject* cpu_set_exception ( JitCpu self,
PyObject *  args 
)

Definition at line 180 of file JitCore_x86.c.

181 {
182  PyObject *item1;
183  uint64_t i;
184 
185  if (!PyArg_ParseTuple(args, "O", &item1))
186  return NULL;
187 
188  PyGetInt(item1, i);
189 
190  ((vm_cpu_t*)self->cpu)->exception_flags = i;
191  Py_INCREF(Py_None);
192  return Py_None;
193 }
#define PyGetInt(item, value)
Definition: JitCore.h:8
void * cpu
Definition: JitCore.h:97
PyObject* cpu_set_gpreg ( JitCpu self,
PyObject *  args 
)

Definition at line 106 of file JitCore_x86.c.

107 {
108  PyObject* dict;
109  PyObject *d_key, *d_value = NULL;
110  Py_ssize_t pos = 0;
111  uint64_t val;
112  unsigned int i, found;
113 
114  if (!PyArg_ParseTuple(args, "O", &dict))
115  return NULL;
116  if(!PyDict_Check(dict))
117  RAISE(PyExc_TypeError, "arg must be dict");
118  while(PyDict_Next(dict, &pos, &d_key, &d_value)){
119  if(!PyString_Check(d_key))
120  RAISE(PyExc_TypeError, "key must be str");
121 
122  PyGetInt(d_value, val);
123 
124  found = 0;
125  for (i=0; i < sizeof(gpreg_dict)/sizeof(reg_dict); i++){
126  if (strcmp(PyString_AsString(d_key), gpreg_dict[i].name))
127  continue;
128  *((uint64_t*)(((char*)(self->cpu)) + gpreg_dict[i].offset)) = val;
129  found = 1;
130  break;
131  }
132 
133  if (found)
134  continue;
135  fprintf(stderr, "unkown key: %s\n", PyString_AsString(d_key));
136  RAISE(PyExc_ValueError, "unkown reg");
137  }
138  Py_INCREF(Py_None);
139  return Py_None;
140 }
#define RAISE(errtype, msg)
Definition: JitCore.h:4
#define PyGetInt(item, value)
Definition: JitCore.h:8
string name
Definition: ir2C.py:22
size_t offset
Definition: JitCore.h:103
reg_dict gpreg_dict[]
Definition: JitCore_x86.c:13
PyObject* cpu_set_segm_base ( JitCpu self,
PyObject *  args 
)

Definition at line 204 of file JitCore_x86.c.

205 {
206  PyObject *item1, *item2;
207  uint64_t segm_num, segm_base;
208 
209  if (!PyArg_ParseTuple(args, "OO", &item1, &item2))
210  return NULL;
211 
212  PyGetInt(item1, segm_num);
213  PyGetInt(item2, segm_base);
214  ((vm_cpu_t*)self->cpu)->segm_base[segm_num] = segm_base;
215 
216  Py_INCREF(Py_None);
217  return Py_None;
218 }
#define PyGetInt(item, value)
Definition: JitCore.h:8
void * cpu
Definition: JitCore.h:97
void dump_gpregs ( vm_cpu_t vmcpu)

Definition at line 155 of file JitCore_x86.c.

156 {
157 
158  printf("RAX %.16"PRIX64" RBX %.16"PRIX64" RCX %.16"PRIX64" RDX %.16"PRIX64"\n",
159  vmcpu->RAX, vmcpu->RBX, vmcpu->RCX, vmcpu->RDX);
160  printf("RSI %.16"PRIX64" RDI %.16"PRIX64" RSP %.16"PRIX64" RBP %.16"PRIX64"\n",
161  vmcpu->RSI, vmcpu->RDI, vmcpu->RSP, vmcpu->RBP);
162  printf("zf %.16"PRIX64" nf %.16"PRIX64" of %.16"PRIX64" cf %.16"PRIX64"\n",
163  vmcpu->zf, vmcpu->nf, vmcpu->of, vmcpu->cf);
164  printf("RIP %.16"PRIX64"\n",
165  vmcpu->RIP);
166 
167 }
uint64_t RSI
Definition: JitCore_x86.h:12
uint32_t cf
uint64_t RAX
Definition: JitCore_x86.h:8
uint64_t RSP
Definition: JitCore_x86.h:14
uint64_t RCX
Definition: JitCore_x86.h:10
uint32_t nf
uint32_t of
uint64_t RDX
Definition: JitCore_x86.h:11
uint64_t RIP
Definition: JitCore_x86.h:25
uint64_t RDI
Definition: JitCore_x86.h:13
uint64_t RBX
Definition: JitCore_x86.h:9
uint64_t RBP
Definition: JitCore_x86.h:15
uint32_t zf

+ Here is the caller graph for this function:

PyObject* get_gpreg_offset_all ( void  )

Definition at line 459 of file JitCore_x86.c.

460 {
461  PyObject *dict = PyDict_New();
462  PyObject *o;
463 
465  get_reg_off(exception_flags_new);
466 
467  get_reg_off(RAX);
468  get_reg_off(RBX);
469  get_reg_off(RCX);
470  get_reg_off(RDX);
471  get_reg_off(RSI);
472  get_reg_off(RDI);
473  get_reg_off(RSP);
474  get_reg_off(RBP);
475  get_reg_off(R8);
476  get_reg_off(R9);
477  get_reg_off(R10);
478  get_reg_off(R11);
479  get_reg_off(R12);
480  get_reg_off(R13);
481  get_reg_off(R14);
482  get_reg_off(R15);
483  get_reg_off(RIP);
484  get_reg_off(RAX_new);
485  get_reg_off(RBX_new);
486  get_reg_off(RCX_new);
487  get_reg_off(RDX_new);
488  get_reg_off(RSI_new);
489  get_reg_off(RDI_new);
490  get_reg_off(RSP_new);
491  get_reg_off(RBP_new);
492  get_reg_off(R8_new);
493  get_reg_off(R9_new);
494  get_reg_off(R10_new);
495  get_reg_off(R11_new);
496  get_reg_off(R12_new);
497  get_reg_off(R13_new);
498  get_reg_off(R14_new);
499  get_reg_off(R15_new);
500  get_reg_off(RIP_new);
501  get_reg_off(zf);
502  get_reg_off(nf);
503  get_reg_off(pf);
504  get_reg_off(of);
505  get_reg_off(cf);
506  get_reg_off(af);
507  get_reg_off(df);
508  get_reg_off(zf_new);
509  get_reg_off(nf_new);
510  get_reg_off(pf_new);
511  get_reg_off(of_new);
512  get_reg_off(cf_new);
513  get_reg_off(af_new);
514  get_reg_off(df_new);
515  get_reg_off(tf);
516  get_reg_off(i_f);
517  get_reg_off(iopl_f);
518  get_reg_off(nt);
519  get_reg_off(rf);
520  get_reg_off(vm);
521  get_reg_off(ac);
522  get_reg_off(vif);
523  get_reg_off(vip);
524  get_reg_off(i_d);
525  get_reg_off(tf_new);
526  get_reg_off(i_f_new);
527  get_reg_off(iopl_f_new);
528  get_reg_off(nt_new);
529  get_reg_off(rf_new);
530  get_reg_off(vm_new);
531  get_reg_off(ac_new);
532  get_reg_off(vif_new);
533  get_reg_off(vip_new);
534  get_reg_off(i_d_new);
535  get_reg_off(my_tick);
536  get_reg_off(cond);
537 
546  get_reg_off(float_st0_new);
547  get_reg_off(float_st1_new);
548  get_reg_off(float_st2_new);
549  get_reg_off(float_st3_new);
550  get_reg_off(float_st4_new);
551  get_reg_off(float_st5_new);
552  get_reg_off(float_st6_new);
553  get_reg_off(float_st7_new);
554 
555  get_reg_off(ES);
556  get_reg_off(CS);
557  get_reg_off(SS);
558  get_reg_off(DS);
559  get_reg_off(FS);
560  get_reg_off(GS);
561  get_reg_off(ES_new);
562  get_reg_off(CS_new);
563  get_reg_off(SS_new);
564  get_reg_off(DS_new);
565  get_reg_off(FS_new);
566  get_reg_off(GS_new);
567 
568  get_reg_off(pfmem08_0);
569  get_reg_off(pfmem08_1);
570  get_reg_off(pfmem08_2);
571  get_reg_off(pfmem08_3);
572  get_reg_off(pfmem08_4);
573  get_reg_off(pfmem08_5);
574  get_reg_off(pfmem08_6);
575  get_reg_off(pfmem08_7);
576  get_reg_off(pfmem08_8);
577  get_reg_off(pfmem08_9);
578  get_reg_off(pfmem08_10);
579  get_reg_off(pfmem08_11);
580  get_reg_off(pfmem08_12);
581  get_reg_off(pfmem08_13);
582  get_reg_off(pfmem08_14);
583  get_reg_off(pfmem08_15);
584  get_reg_off(pfmem08_16);
585  get_reg_off(pfmem08_17);
586  get_reg_off(pfmem08_18);
587  get_reg_off(pfmem08_19);
588  get_reg_off(pfmem16_0);
589  get_reg_off(pfmem16_1);
590  get_reg_off(pfmem16_2);
591  get_reg_off(pfmem16_3);
592  get_reg_off(pfmem16_4);
593  get_reg_off(pfmem16_5);
594  get_reg_off(pfmem16_6);
595  get_reg_off(pfmem16_7);
596  get_reg_off(pfmem16_8);
597  get_reg_off(pfmem16_9);
598  get_reg_off(pfmem16_10);
599  get_reg_off(pfmem16_11);
600  get_reg_off(pfmem16_12);
601  get_reg_off(pfmem16_13);
602  get_reg_off(pfmem16_14);
603  get_reg_off(pfmem16_15);
604  get_reg_off(pfmem16_16);
605  get_reg_off(pfmem16_17);
606  get_reg_off(pfmem16_18);
607  get_reg_off(pfmem16_19);
608  get_reg_off(pfmem32_0);
609  get_reg_off(pfmem32_1);
610  get_reg_off(pfmem32_2);
611  get_reg_off(pfmem32_3);
612  get_reg_off(pfmem32_4);
613  get_reg_off(pfmem32_5);
614  get_reg_off(pfmem32_6);
615  get_reg_off(pfmem32_7);
616  get_reg_off(pfmem32_8);
617  get_reg_off(pfmem32_9);
618  get_reg_off(pfmem32_10);
619  get_reg_off(pfmem32_11);
620  get_reg_off(pfmem32_12);
621  get_reg_off(pfmem32_13);
622  get_reg_off(pfmem32_14);
623  get_reg_off(pfmem32_15);
624  get_reg_off(pfmem32_16);
625  get_reg_off(pfmem32_17);
626  get_reg_off(pfmem32_18);
627  get_reg_off(pfmem32_19);
628  get_reg_off(pfmem64_0);
629  get_reg_off(pfmem64_1);
630  get_reg_off(pfmem64_2);
631  get_reg_off(pfmem64_3);
632  get_reg_off(pfmem64_4);
633  get_reg_off(pfmem64_5);
634  get_reg_off(pfmem64_6);
635  get_reg_off(pfmem64_7);
636  get_reg_off(pfmem64_8);
637  get_reg_off(pfmem64_9);
638  get_reg_off(pfmem64_10);
639  get_reg_off(pfmem64_11);
640  get_reg_off(pfmem64_12);
641  get_reg_off(pfmem64_13);
642  get_reg_off(pfmem64_14);
643  get_reg_off(pfmem64_15);
644  get_reg_off(pfmem64_16);
645  get_reg_off(pfmem64_17);
646  get_reg_off(pfmem64_18);
647  get_reg_off(pfmem64_19);
648 
649  get_reg_off(MM0);
650  get_reg_off(MM1);
651  get_reg_off(MM2);
652  get_reg_off(MM3);
653  get_reg_off(MM4);
654  get_reg_off(MM5);
655  get_reg_off(MM6);
656  get_reg_off(MM7);
657  get_reg_off(MM0_new);
658  get_reg_off(MM1_new);
659  get_reg_off(MM2_new);
660  get_reg_off(MM3_new);
661  get_reg_off(MM4_new);
662  get_reg_off(MM5_new);
663  get_reg_off(MM6_new);
664  get_reg_off(MM7_new);
665  return dict;
666 }
#define get_reg_off(reg)
Definition: JitCore.h:81
tuple exception_flags
Definition: regs.py:7
getset_reg_E_u32 ( AX  )
getset_reg_E_u32 ( BX  )
getset_reg_E_u32 ( CX  )
getset_reg_E_u32 ( DX  )
getset_reg_E_u32 ( SI  )
getset_reg_E_u32 ( DI  )
getset_reg_E_u32 ( SP  )
getset_reg_E_u32 ( BP  )
getset_reg_E_u32 ( IP  )
getset_reg_R_u16 ( AX  )
getset_reg_R_u16 ( BX  )
getset_reg_R_u16 ( CX  )
getset_reg_R_u16 ( DX  )
getset_reg_R_u16 ( SI  )
getset_reg_R_u16 ( DI  )
getset_reg_R_u16 ( SP  )
getset_reg_R_u16 ( BP  )
getset_reg_R_u16 ( IP  )
getset_reg_u64 ( RAX  )
getset_reg_u64 ( RBX  )
getset_reg_u64 ( RCX  )
getset_reg_u64 ( RDX  )
getset_reg_u64 ( RSI  )
getset_reg_u64 ( RDI  )
getset_reg_u64 ( RSP  )
getset_reg_u64 ( RBP  )
getset_reg_u64 ( R8  )
getset_reg_u64 ( R9  )
getset_reg_u64 ( R10  )
getset_reg_u64 ( R11  )
getset_reg_u64 ( R12  )
getset_reg_u64 ( R13  )
getset_reg_u64 ( R14  )
getset_reg_u64 ( R15  )
getset_reg_u64 ( RIP  )
getset_reg_u64 ( zf  )
getset_reg_u64 ( nf  )
getset_reg_u64 ( pf  )
getset_reg_u64 ( of  )
getset_reg_u64 ( cf  )
getset_reg_u64 ( af  )
getset_reg_u64 ( df  )
getset_reg_u64 ( ES  )
getset_reg_u64 ( CS  )
getset_reg_u64 ( SS  )
getset_reg_u64 ( DS  )
getset_reg_u64 ( FS  )
getset_reg_u64 ( GS  )
PyMODINIT_FUNC initJitCore_x86 ( void  )

Definition at line 795 of file JitCore_x86.c.

796 {
797  PyObject *m;
798 
799  if (PyType_Ready(&JitCpuType) < 0)
800  return;
801 
802  m = Py_InitModule("JitCore_x86", JitCore_x86_Methods);
803  if (m == NULL)
804  return;
805 
806  JitCore_x86_Error = PyErr_NewException("JitCore_x86.error", NULL, NULL);
807  Py_INCREF(JitCore_x86_Error);
808  PyModule_AddObject(m, "error", JitCore_x86_Error);
809 
810  Py_INCREF(&JitCpuType);
811  PyModule_AddObject(m, "JitCpu", (PyObject *)&JitCpuType);
812 
813 }
static PyObject * JitCore_x86_Error
Definition: JitCore_x86.c:792
static PyMethodDef JitCore_x86_Methods[]
Definition: JitCore_x86.c:782
static PyTypeObject JitCpuType
Definition: JitCore_x86.c:738
static int JitCpu_init ( JitCpu self,
PyObject *  args,
PyObject *  kwds 
)
static

Definition at line 356 of file JitCore_x86.c.

357 {
358  self->cpu = malloc(sizeof(vm_cpu_t));
359  if (self->cpu == NULL) {
360  fprintf(stderr, "cannot alloc vm_cpu_t\n");
361  exit(0);
362  }
363  return 0;
364 }
void * cpu
Definition: JitCore.h:97
void MEM_WRITE_08 ( JitCpu jitcpu,
uint64_t  addr,
uint8_t  src 
)

Definition at line 270 of file JitCore_x86.c.

271 {
272  vm_MEM_WRITE_08(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
273  check_automod(jitcpu, addr, 8);
274 }
PyObject_HEAD PyObject * pyvm
Definition: JitCore.h:95
void vm_MEM_WRITE_08(vm_mngr_t *vm_mngr, uint64_t addr, unsigned char src)
Definition: vm_mngr.c:438
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
Definition: JitCore_x86.c:259

+ Here is the call graph for this function:

void MEM_WRITE_16 ( JitCpu jitcpu,
uint64_t  addr,
uint16_t  src 
)

Definition at line 276 of file JitCore_x86.c.

277 {
278  vm_MEM_WRITE_16(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
279  check_automod(jitcpu, addr, 16);
280 }
void vm_MEM_WRITE_16(vm_mngr_t *vm_mngr, uint64_t addr, unsigned short src)
Definition: vm_mngr.c:444
PyObject_HEAD PyObject * pyvm
Definition: JitCore.h:95
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
Definition: JitCore_x86.c:259

+ Here is the call graph for this function:

void MEM_WRITE_32 ( JitCpu jitcpu,
uint64_t  addr,
uint32_t  src 
)

Definition at line 282 of file JitCore_x86.c.

283 {
284  vm_MEM_WRITE_32(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
285  check_automod(jitcpu, addr, 32);
286 }
PyObject_HEAD PyObject * pyvm
Definition: JitCore.h:95
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
Definition: JitCore_x86.c:259
void vm_MEM_WRITE_32(vm_mngr_t *vm_mngr, uint64_t addr, unsigned int src)
Definition: vm_mngr.c:449

+ Here is the call graph for this function:

void MEM_WRITE_64 ( JitCpu jitcpu,
uint64_t  addr,
uint64_t  src 
)

Definition at line 288 of file JitCore_x86.c.

289 {
290  vm_MEM_WRITE_64(&((VmMngr*)jitcpu->pyvm)->vm_mngr, addr, src);
291  check_automod(jitcpu, addr, 64);
292 }
void vm_MEM_WRITE_64(vm_mngr_t *vm_mngr, uint64_t addr, uint64_t src)
Definition: vm_mngr.c:454
PyObject_HEAD PyObject * pyvm
Definition: JitCore.h:95
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
Definition: JitCore_x86.c:259

+ Here is the call graph for this function:

uint64_t segm2addr ( JitCpu jitcpu,
uint64_t  segm,
uint64_t  addr 
)

Definition at line 233 of file JitCore_x86.c.

234 {
235  return addr + ((vm_cpu_t*)jitcpu->cpu)->segm_base[segm];
236 }
void * cpu
Definition: JitCore.h:97
PyObject* vm_set_mem ( JitCpu self,
PyObject *  args 
)

Definition at line 296 of file JitCore_x86.c.

297 {
298  PyObject *py_addr;
299  PyObject *py_buffer;
300  Py_ssize_t py_length;
301 
302  char * buffer;
303  uint64_t size;
304  uint64_t addr;
305  int ret = 0x1337;
306 
307  if (!PyArg_ParseTuple(args, "OO", &py_addr, &py_buffer))
308  return NULL;
309 
310  PyGetInt(py_addr, addr);
311 
312  if(!PyString_Check(py_buffer))
313  RAISE(PyExc_TypeError,"arg must be str");
314 
315  size = PyString_Size(py_buffer);
316  PyString_AsStringAndSize(py_buffer, &buffer, &py_length);
317 
318  ret = vm_write_mem(&(((VmMngr*)self->pyvm)->vm_mngr), addr, buffer, size);
319  if (ret < 0)
320  RAISE(PyExc_TypeError,"arg must be str");
321  check_automod(self, addr, size*8);
322 
323  Py_INCREF(Py_None);
324  return Py_None;
325 }
#define RAISE(errtype, msg)
Definition: JitCore.h:4
#define PyGetInt(item, value)
Definition: JitCore.h:8
int vm_write_mem(vm_mngr_t *vm_mngr, uint64_t addr, char *buffer, uint64_t size)
Definition: vm_mngr.c:518
PyObject_HEAD PyObject * pyvm
Definition: JitCore.h:95
void check_automod(JitCpu *jitcpu, uint64_t addr, uint64_t size)
Definition: JitCore_x86.c:259

+ Here is the call graph for this function:

Variable Documentation

reg_dict gpreg_dict[]

Definition at line 13 of file JitCore_x86.c.

PyObject* JitCore_x86_Error
static

Definition at line 792 of file JitCore_x86.c.

PyMethodDef JitCore_x86_Methods[]
static
Initial value:
= {
{"get_gpreg_offset_all", (PyCFunction)get_gpreg_offset_all, METH_NOARGS},
{NULL, NULL, 0, NULL}
}
PyObject * get_gpreg_offset_all(void)
Definition: JitCore_x86.c:459

Definition at line 782 of file JitCore_x86.c.

PyGetSetDef JitCpu_getseters[]
static

Definition at line 669 of file JitCore_x86.c.

PyMemberDef JitCpu_members[]
static
Initial value:
= {
{NULL}
}

Definition at line 327 of file JitCore_x86.c.

PyMethodDef JitCpu_methods[]
static
Initial value:
= {
{"init_regs", (PyCFunction)cpu_init_regs, METH_NOARGS,
"X"},
{"dump_gpregs", (PyCFunction)cpu_dump_gpregs, METH_NOARGS,
"X"},
{"get_gpreg", (PyCFunction)cpu_get_gpreg, METH_NOARGS,
"X"},
{"set_gpreg", (PyCFunction)cpu_set_gpreg, METH_VARARGS,
"X"},
{"get_segm_base", (PyCFunction)cpu_get_segm_base, METH_VARARGS,
"X"},
{"set_segm_base", (PyCFunction)cpu_set_segm_base, METH_VARARGS,
"X"},
{"get_exception", (PyCFunction)cpu_get_exception, METH_VARARGS,
"X"},
{"set_exception", (PyCFunction)cpu_set_exception, METH_VARARGS,
"X"},
{"set_mem", (PyCFunction)vm_set_mem, METH_VARARGS,
"X"},
{"get_mem", (PyCFunction)vm_get_mem, METH_VARARGS,
"X"},
{NULL}
}
PyObject * cpu_set_segm_base(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:204
PyObject * cpu_init_regs(JitCpu *self)
Definition: JitCore_x86.c:142
PyObject * cpu_get_segm_base(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:220
PyObject * cpu_get_exception(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:195
PyObject * vm_get_mem(JitCpu *self, PyObject *args)
PyObject * cpu_set_gpreg(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:106
PyObject * cpu_get_gpreg(JitCpu *self)
Definition: JitCore_x86.c:58
PyObject * cpu_dump_gpregs(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:169
PyObject * cpu_set_exception(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:180
PyObject * vm_set_mem(JitCpu *self, PyObject *args)
Definition: JitCore_x86.c:296

Definition at line 331 of file JitCore_x86.c.

PyTypeObject JitCpuType
static

Definition at line 738 of file JitCore_x86.c.