From 4666c3aa0e9d41cd8619eea15007ea1ab41dd944 Mon Sep 17 00:00:00 2001 From: anonymous-patcher <62902962+anonymous-patcher@users.noreply.github.com> Date: Mon, 30 Mar 2020 14:18:55 -0400 Subject: [PATCH 1/2] Update process_thread.c Check if the accessed memory range is readable. This is necessary for POMP to handle the guard pages correctly. --- reverse-from-coredump/src/process_thread.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reverse-from-coredump/src/process_thread.c b/reverse-from-coredump/src/process_thread.c index 49c1cd9..d2c33d5 100644 --- a/reverse-from-coredump/src/process_thread.c +++ b/reverse-from-coredump/src/process_thread.c @@ -58,6 +58,10 @@ int single_op_legal_access(x86_insn_t *insn, x86_op_t *opd, struct elf_prstatus if ((opd -> access & op_write) && (!address_writable(core_info, target))) { legal = 0; } + + if ((opd -> access & op_read) && (!address_readable(core_info, target))) { + legal = 0; + } } return legal; } From d65581168ae3f0b975e93cb3ba214f8e229be06f Mon Sep 17 00:00:00 2001 From: anonymous-patcher <62902962+anonymous-patcher@users.noreply.github.com> Date: Mon, 30 Mar 2020 14:20:02 -0400 Subject: [PATCH 2/2] Update access_memory.c Helper function to determine if memory range is readable. --- reverse-from-coredump/src/access_memory.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reverse-from-coredump/src/access_memory.c b/reverse-from-coredump/src/access_memory.c index 0f4e416..5ed394e 100644 --- a/reverse-from-coredump/src/access_memory.c +++ b/reverse-from-coredump/src/access_memory.c @@ -189,6 +189,13 @@ int address_writable(elf_core_info* core_info, Elf32_Addr address){ return (core_info->phdr[segment].p_flags & PF_W) ? 1:0; } +int address_readable(elf_core_info* core_info, Elf32_Addr address){ + int segment; + if((segment = address_segment(core_info, address))<0) + return 0; + return (core_info->phdr[segment].p_flags & PF_R) ? 1:0; +} + int addr_in_segment(GElf_Phdr phdr, Elf32_Addr addr){ if(addr >= phdr.p_vaddr && addr < phdr.p_vaddr + phdr.p_memsz) return 1;