Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions reverse-from-coredump/src/access_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions reverse-from-coredump/src/process_thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down