about summary refs log tree commit diff stats
path: root/miasm/tools/emul_lib/libcodenat.c
diff options
context:
space:
mode:
Diffstat (limited to 'miasm/tools/emul_lib/libcodenat.c')
-rw-r--r--miasm/tools/emul_lib/libcodenat.c52
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;