diff options
| author | serpilliere <devnull@localhost> | 2011-12-22 10:16:56 +0100 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2011-12-22 10:16:56 +0100 |
| commit | 880a2ead19d69a8dacfd88c00fd9d5f75dea3abf (patch) | |
| tree | ed3b060c6e2dfb529c46bc3a79f6f470b94de348 /miasm/tools/emul_lib/libcodenat.c | |
| parent | 1450a19ba0b1f7c3aba6faacc5e80ae90eb7b25c (diff) | |
| download | focaccia-miasm-880a2ead19d69a8dacfd88c00fd9d5f75dea3abf.tar.gz focaccia-miasm-880a2ead19d69a8dacfd88c00fd9d5f75dea3abf.zip | |
add segmentation q&d support for emulation (16bit/32bit?)
Diffstat (limited to 'miasm/tools/emul_lib/libcodenat.c')
| -rw-r--r-- | miasm/tools/emul_lib/libcodenat.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/miasm/tools/emul_lib/libcodenat.c b/miasm/tools/emul_lib/libcodenat.c index ca9415a0..aca3a41d 100644 --- a/miasm/tools/emul_lib/libcodenat.c +++ b/miasm/tools/emul_lib/libcodenat.c @@ -323,24 +323,48 @@ void MEM_WRITE_08(uint64_t addr, unsigned char src) memory_page_write(8, addr, src); } +void MEM_WRITE_08_SEGM(uint16_t segm, uint64_t addr, unsigned char src) +{ + check_write_code_bloc(8, addr + vmcpu.segm_base[segm]); + memory_page_write(8, addr + vmcpu.segm_base[segm], src); +} + void MEM_WRITE_16(uint64_t addr, unsigned short src) { check_write_code_bloc(16, addr); memory_page_write(16, addr, src); } +void MEM_WRITE_16_SEGM(uint16_t segm, uint64_t addr, unsigned short src) +{ + check_write_code_bloc(16, addr + vmcpu.segm_base[segm]); + memory_page_write(16, addr + vmcpu.segm_base[segm], src); +} + void MEM_WRITE_32(uint64_t addr, unsigned int src) { check_write_code_bloc(32, addr); memory_page_write(32, addr, src); } +void MEM_WRITE_32_SEGM(uint16_t segm, uint64_t addr, unsigned int src) +{ + check_write_code_bloc(32, addr + vmcpu.segm_base[segm]); + memory_page_write(32, addr + vmcpu.segm_base[segm], src); +} + void MEM_WRITE_64(uint64_t addr, uint64_t src) { check_write_code_bloc(64, addr); memory_page_write(64, addr, src); } +void MEM_WRITE_64_SEGM(uint16_t segm, uint64_t addr, uint64_t src) +{ + check_write_code_bloc(64, addr + vmcpu.segm_base[segm]); + memory_page_write(64, addr + vmcpu.segm_base[segm], src); +} + unsigned int MEM_LOOKUP(unsigned int my_size, uint64_t addr) { @@ -356,6 +380,13 @@ unsigned char MEM_LOOKUP_08(uint64_t addr) return ret; } +unsigned char MEM_LOOKUP_08_SEGM(uint16_t segm, uint64_t addr) +{ + unsigned char ret; + ret = memory_page_read(8, addr + vmcpu.segm_base[segm]); + return ret; +} + unsigned short MEM_LOOKUP_16(uint64_t addr) { unsigned short ret; @@ -363,6 +394,13 @@ unsigned short MEM_LOOKUP_16(uint64_t addr) return ret; } +unsigned short MEM_LOOKUP_16_SEGM(uint16_t segm, uint64_t addr) +{ + unsigned short ret; + ret = memory_page_read(16, addr + vmcpu.segm_base[segm]); + return ret; +} + unsigned int MEM_LOOKUP_32(uint64_t addr) { unsigned int ret; @@ -370,6 +408,13 @@ unsigned int MEM_LOOKUP_32(uint64_t addr) return ret; } +unsigned int MEM_LOOKUP_32_SEGM(uint16_t segm, uint64_t addr) +{ + unsigned int ret; + ret = memory_page_read(32, addr + vmcpu.segm_base[segm]); + return ret; +} + uint64_t MEM_LOOKUP_64(uint64_t addr) { uint64_t ret; @@ -377,6 +422,13 @@ uint64_t MEM_LOOKUP_64(uint64_t addr) return ret; } +uint64_t MEM_LOOKUP_64_SEGM(uint16_t segm, uint64_t addr) +{ + uint64_t ret; + ret = memory_page_read(64, addr + vmcpu.segm_base[segm]); + return ret; +} + void vm_throw(unsigned long flags) { vmcpu.vm_exception_flags |= flags; |