diff options
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; |