diff options
Diffstat (limited to 'src/crash-stack')
-rw-r--r-- | src/crash-stack/crash-stack-arm.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/crash-stack/crash-stack-arm.c b/src/crash-stack/crash-stack-arm.c index 4edf54f..e1d6904 100644 --- a/src/crash-stack/crash-stack-arm.c +++ b/src/crash-stack/crash-stack-arm.c @@ -75,13 +75,19 @@ Boolean readT (Int32 a, void *v, size_t size) { // get data from segment GElf_Phdr mem; - GElf_Phdr *phdr = gelf_getphdr (g_core, segment, &mem); - Dwarf_Addr offset_in_segment = a - phdr->p_vaddr; - if (offset_in_segment < phdr->p_filesz) + GElf_Phdr *phdr; + Dwarf_Addr offset_in_segment; + + phdr = gelf_getphdr (g_core, segment, &mem); + if (phdr != NULL) { - Dwarf_Addr offset_in_file = phdr->p_offset + offset_in_segment; + offset_in_segment = a - phdr->p_vaddr; + if (offset_in_segment < phdr->p_filesz) + { + Dwarf_Addr offset_in_file = phdr->p_offset + offset_in_segment; - data = elf_getdata_rawchunk (g_core, offset_in_file, size, ELF_T_BYTE); + data = elf_getdata_rawchunk (g_core, offset_in_file, size, ELF_T_BYTE); + } } } |