From da92b68bcd50bd35a25b747691acfe5a958e22da Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Tue, 15 Sep 2020 20:12:41 -0400 Subject: [PATCH] GP-164 Corrected ELF ARM R_ARM_REL32 (type 3) relocation processing --- .../format/elf/relocation/ARM_ElfRelocationHandler.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/elf/relocation/ARM_ElfRelocationHandler.java b/Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/elf/relocation/ARM_ElfRelocationHandler.java index b2785c67da..7326f8e8e2 100644 --- a/Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/elf/relocation/ARM_ElfRelocationHandler.java +++ b/Ghidra/Processors/ARM/src/main/java/ghidra/app/util/bin/format/elf/relocation/ARM_ElfRelocationHandler.java @@ -91,9 +91,10 @@ public class ARM_ElfRelocationHandler extends ElfRelocationHandler { memory.setInt(relocationAddress, newValue); break; } - case ARM_ElfRelocationConstants.R_ARM_REL32: { // // Target class: Data - newValue = (int) (symbolValue + addend); - newValue -= (offset + 8); // PC relative, PC will be 8 bytes after inst start + case ARM_ElfRelocationConstants.R_ARM_REL32: { // Target class: Data + int oldValue = memory.getInt(relocationAddress); + newValue = (int) (symbolValue + addend + oldValue); + newValue -= offset; // PC relative if (isThumb) { newValue |= 1; }