about summary refs log tree commit diff stats
path: root/miasm/jitter/vm_mngr.h
diff options
context:
space:
mode:
Diffstat (limited to 'miasm/jitter/vm_mngr.h')
-rw-r--r--miasm/jitter/vm_mngr.h311
1 files changed, 0 insertions, 311 deletions
diff --git a/miasm/jitter/vm_mngr.h b/miasm/jitter/vm_mngr.h
deleted file mode 100644
index f7aea5b8..00000000
--- a/miasm/jitter/vm_mngr.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
-** Copyright (C) 2011 EADS France, Fabrice Desclaux <fabrice.desclaux@eads.net>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License along
-** with this program; if not, write to the Free Software Foundation, Inc.,
-** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#ifndef CODENAT_H
-#define CODENAT_H
-
-#if defined(_WIN32) || defined(_WIN64)
-#ifndef _CRT_SECURE_NO_WARNINGS
-#define _CRT_SECURE_NO_WARNINGS
-#endif
-#endif
-
-#if _WIN32
-#define _MIASM_EXPORT __declspec(dllexport)
-#else
-#define _MIASM_EXPORT
-#endif
-
-#include <Python.h>
-#include <stdint.h>
-
-#include "queue.h"
-
-#ifdef __APPLE__
-#define __BYTE_ORDER __BYTE_ORDER__
-#define __BIG_ENDIAN BIG_ENDIAN
-#define __LITTLE_ENDIAN LITTLE_ENDIAN
-#elif defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
-#define __BYTE_ORDER _BYTE_ORDER
-#define __BIG_ENDIAN _BIG_ENDIAN
-#define __LITTLE_ENDIAN _LITTLE_ENDIAN
-#elif defined(_WIN32) || defined(_WIN64)
-#define __BYTE_ORDER __LITTLE_ENDIAN
-#define __BIG_ENDIAN '>'
-#define __LITTLE_ENDIAN '<'
-#elif defined(__ANDROID__)
-#define __BYTE_ORDER __BYTE_ORDER__
-#define __LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
-#define __BIG_ENDIAN __ORDER_BIG_ENDIAN__
-#endif
-
-
-#define Endian16_Swap(value) \
-      ((((uint16_t)((value) & 0x00FF)) << 8) | \
-       (((uint16_t)((value) & 0xFF00)) >> 8))
-
-#define Endian32_Swap(value) \
-	((((uint32_t)((value) & 0x000000FF)) << 24) |	\
-	 (((uint32_t)((value) & 0x0000FF00)) << 8) |	\
-	 (((uint32_t)((value) & 0x00FF0000)) >> 8) |	\
-	 (((uint32_t)((value) & 0xFF000000)) >> 24))
-
-#define Endian64_Swap(value)					      \
-	(((((uint64_t)value)<<56) & 0xFF00000000000000ULL)  |	      \
-	 ((((uint64_t)value)<<40) & 0x00FF000000000000ULL)  |	      \
-	 ((((uint64_t)value)<<24) & 0x0000FF0000000000ULL)  |	      \
-	 ((((uint64_t)value)<< 8) & 0x000000FF00000000ULL)  |	      \
-	 ((((uint64_t)value)>> 8) & 0x00000000FF000000ULL)  |	      \
-	 ((((uint64_t)value)>>24) & 0x0000000000FF0000ULL)  |	      \
-	 ((((uint64_t)value)>>40) & 0x000000000000FF00ULL)  |	      \
-	 ((((uint64_t)value)>>56) & 0x00000000000000FFULL))
-
-
-LIST_HEAD(code_bloc_list_head, code_bloc_node);
-LIST_HEAD(memory_breakpoint_info_head, memory_breakpoint_info);
-
-
-#define BREAKPOINT_READ 1
-#define BREAKPOINT_WRITE 2
-
-#define BREAK_SIGALARM 1<<5
-
-#define MAX_MEMORY_PAGE_POOL_TAB 0x100000
-#define MEMORY_PAGE_POOL_MASK_BIT 12
-#define VM_BIG_ENDIAN 1
-#define VM_LITTLE_ENDIAN 2
-
-
-struct memory_page_node {
-	uint64_t ad;
-	size_t size;
-	uint64_t access;
-	void* ad_hp;
-	char* name;
-};
-
-struct memory_access {
-	uint64_t start;
-	uint64_t stop;
-};
-
-struct memory_access_list {
-	struct memory_access *array;
-	size_t allocated;
-	size_t num;
-};
-
-typedef struct {
-	int sex;
-	struct code_bloc_list_head code_bloc_pool;
-	struct memory_breakpoint_info_head memory_breakpoint_pool;
-
-	int memory_pages_number;
-	struct memory_page_node* memory_pages_array;
-
-	uint64_t code_bloc_pool_ad_min;
-	uint64_t code_bloc_pool_ad_max;
-
-	uint64_t exception_flags;
-	uint64_t exception_flags_new;
-	PyObject *addr2obj;
-
-
-	struct memory_access_list memory_r;
-	struct memory_access_list memory_w;
-
-
-	int write_num;
-
-}vm_mngr_t;
-
-
-
-typedef struct {
-	PyObject *func;
-}func_resolver;
-
-
-
-
-//extern vm_mngr_t vmmngr;
-
-struct code_bloc_node {
-	uint64_t ad_start;
-	uint64_t ad_stop;
-	uint64_t ad_code;
-	LIST_ENTRY(code_bloc_node)   next;
-};
-
-
-struct memory_breakpoint_info {
-	uint64_t ad;
-	uint64_t size;
-	uint64_t access;
-	LIST_ENTRY(memory_breakpoint_info)   next;
-};
-
-
-
-#define PAGE_READ 1
-#define PAGE_WRITE 2
-#define PAGE_EXEC 4
-
-#define EXCEPT_DO_NOT_UPDATE_PC (1<<25)
-
-// interrupt with eip update after instr
-#define EXCEPT_CODE_AUTOMOD (1<<0)
-#define EXCEPT_SOFT_BP (1<<1)
-#define EXCEPT_INT_XX (1<<2)
-
-#define EXCEPT_BREAKPOINT_MEMORY (1<<10)
-// Deprecated
-#define EXCEPT_BREAKPOINT_INTERN (EXCEPT_BREAKPOINT_MEMORY)
-
-#define EXCEPT_NUM_UPDT_EIP (1<<11)
-// interrupt with eip at instr
-#define EXCEPT_UNK_MEM_AD ((1<<12) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_THROW_SEH ((1<<13) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_UNK_EIP ((1<<14) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_ACCESS_VIOL ((1<<14) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_INT_DIV_BY_ZERO ((1<<16) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_PRIV_INSN ((1<<17) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_ILLEGAL_INSN ((1<<18) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_UNK_MNEMO ((1<<19) | EXCEPT_DO_NOT_UPDATE_PC)
-#define EXCEPT_INT_1 ((1<<20) | EXCEPT_DO_NOT_UPDATE_PC)
-
-
-int is_mem_mapped(vm_mngr_t* vm_mngr, uint64_t ad);
-uint64_t get_mem_base_addr(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t *addr_base);
-unsigned int MEM_LOOKUP(vm_mngr_t* vm_mngr, unsigned int my_size, uint64_t addr);
-
-int is_mapped(vm_mngr_t* vm_mngr, uint64_t addr, size_t size);
-void vm_throw(vm_mngr_t* vm_mngr, unsigned long flags);
-
-void vm_MEM_WRITE_08(vm_mngr_t* vm_mngr, uint64_t addr, unsigned char src);
-void vm_MEM_WRITE_16(vm_mngr_t* vm_mngr, uint64_t addr, unsigned short src);
-void vm_MEM_WRITE_32(vm_mngr_t* vm_mngr, uint64_t addr, unsigned int src);
-void vm_MEM_WRITE_64(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t src);
-
-unsigned char vm_MEM_LOOKUP_08(vm_mngr_t* vm_mngr, uint64_t addr);
-unsigned short vm_MEM_LOOKUP_16(vm_mngr_t* vm_mngr, uint64_t addr);
-unsigned int vm_MEM_LOOKUP_32(vm_mngr_t* vm_mngr, uint64_t addr);
-uint64_t vm_MEM_LOOKUP_64(vm_mngr_t* vm_mngr, uint64_t addr);
-
-void MEM_WRITE_08_PASSTHROUGH(uint64_t addr, unsigned char src);
-void MEM_WRITE_16_PASSTHROUGH(uint64_t addr, unsigned short src);
-void MEM_WRITE_32_PASSTHROUGH(uint64_t addr, unsigned int src);
-void MEM_WRITE_64_PASSTHROUGH(uint64_t addr, uint64_t src);
-unsigned char MEM_LOOKUP_08_PASSTHROUGH(uint64_t addr);
-unsigned short MEM_LOOKUP_16_PASSTHROUGH(uint64_t addr);
-unsigned int MEM_LOOKUP_32_PASSTHROUGH(uint64_t addr);
-uint64_t MEM_LOOKUP_64_PASSTHROUGH(uint64_t addr);
-
-int vm_read_mem(vm_mngr_t* vm_mngr, uint64_t addr, char** buffer_ptr, size_t size);
-int vm_write_mem(vm_mngr_t* vm_mngr, uint64_t addr, char *buffer, size_t size);
-
-void memory_access_list_init(struct memory_access_list * access);
-void memory_access_list_reset(struct memory_access_list * access);
-void memory_access_list_add(struct memory_access_list * access, uint64_t start, uint64_t stop);
-
-uint16_t set_endian16(vm_mngr_t* vm_mngr, uint16_t val);
-uint32_t set_endian32(vm_mngr_t* vm_mngr, uint32_t val);
-uint64_t set_endian64(vm_mngr_t* vm_mngr, uint64_t val);
-
-
-void hexdump(char* m, unsigned int l);
-
-struct code_bloc_node * create_code_bloc_node(uint64_t ad_start, uint64_t ad_stop);
-void add_code_bloc(vm_mngr_t* vm_mngr, struct code_bloc_node* cbp);
-
-struct memory_page_node * create_memory_page_node(uint64_t ad, size_t size, unsigned int access, const char *name);//memory_page* mp);
-void init_memory_page_pool(vm_mngr_t* vm_mngr);
-void init_code_bloc_pool(vm_mngr_t* vm_mngr);
-void reset_memory_page_pool(vm_mngr_t* vm_mngr);
-void reset_code_bloc_pool(vm_mngr_t* vm_mngr);
-void dump_code_bloc_pool(vm_mngr_t* vm_mngr);
-void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a);
-void remove_memory_page(vm_mngr_t* vm_mngr, uint64_t ad);
-
-
-void init_memory_breakpoint(vm_mngr_t* vm_mngr);
-void reset_memory_breakpoint(vm_mngr_t* vm_mngr);
-void add_memory_breakpoint(vm_mngr_t* vm_mngr, uint64_t ad, uint64_t size, unsigned int access);
-void remove_memory_breakpoint(vm_mngr_t* vm_mngr, uint64_t ad, unsigned int access);
-
-void add_memory_page(vm_mngr_t* vm_mngr, struct memory_page_node* mpn);
-
-void add_mem_read(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t size);
-void add_mem_write(vm_mngr_t* vm_mngr, uint64_t addr, uint64_t size);
-_MIASM_EXPORT void check_invalid_code_blocs(vm_mngr_t* vm_mngr);
-_MIASM_EXPORT void check_memory_breakpoint(vm_mngr_t* vm_mngr);
-_MIASM_EXPORT void reset_memory_access(vm_mngr_t* vm_mngr);
-PyObject* get_memory_read(vm_mngr_t* vm_mngr);
-PyObject* get_memory_write(vm_mngr_t* vm_mngr);
-
-
-char* dump(vm_mngr_t* vm_mngr);
-void dump_memory_breakpoint_pool(vm_mngr_t* vm_mngr);
-PyObject* addr2BlocObj(vm_mngr_t* vm_mngr, uint64_t addr);
-
-
-
-
-/********************************************/
-unsigned int get_memory_page_max_address(void);
-unsigned int get_memory_page_max_user_address(void);
-
-
-int is_mpn_in_tab(vm_mngr_t* vm_mngr, struct memory_page_node* mpn_a);
-
-
-void _func_free(void);
-void _func_alloc(void);
-unsigned int _get_memory_page_max_address_py(void);
-unsigned int _get_memory_page_max_user_address_py(void);
-unsigned int _get_memory_page_from_min_ad_py(unsigned int size);
-
-void _func_malloc_memory_page(void);
-void _func_free_memory_page(void);
-void _func_virtualalloc_memory_page(void);
-void _func_virtualfree_memory_page(void);
-void _func_loadlib_fake(void);
-void _func_getproc_fake(void);
-
-
-void func_free(void);
-void func_alloc(void);
-unsigned int get_memory_page_max_address_py(void);
-unsigned int get_memory_page_max_user_address_py(void);
-unsigned int get_memory_page_from_min_ad_py(unsigned int size);
-struct memory_page_node * get_memory_page_from_address(vm_mngr_t*, uint64_t ad, int raise_exception);
-void func_malloc_memory_page(void);
-void func_free_memory_page(void);
-void func_virtualalloc_memory_page(void);
-void func_virtualfree_memory_page(void);
-void func_loadlib_fake(void);
-void func_getproc_fake(void);
-
-unsigned int access_segment(unsigned int d);
-unsigned int access_segment_ok(unsigned int d);
-
-unsigned int load_segment_limit(unsigned int d);
-unsigned int load_segment_limit_ok(unsigned int d);
-
-unsigned int load_tr_segment_selector(unsigned int d);
-
-#endif