summaryrefslogtreecommitdiff
path: root/src/format/elf/helper_arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/elf/helper_arm.c')
-rw-r--r--src/format/elf/helper_arm.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/format/elf/helper_arm.c b/src/format/elf/helper_arm.c
index cd2d922..f47df5d 100644
--- a/src/format/elf/helper_arm.c
+++ b/src/format/elf/helper_arm.c
@@ -63,7 +63,9 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
- virt_t virt; /* Adresse en mémoire virtuelle */
+ virt_t virt; /* Adresse en mémoire virtuelle*/
+ virt_t final_virt; /* Adresse virtuelle retenue */
+ bool status; /* Bilan d'une opération */
vmpa2t addr; /* Localisation d'une routine */
mrange_t range; /* Couverture mémoire associée */
GBinRoutine *routine; /* Nouvelle routine trouvée */
@@ -100,14 +102,14 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
{
case R_ARM_JUMP_SLOT:
-
virt = ELF_SYM(format, sym, st_value);
-
-
if (virt == 0) continue;
+ final_virt = virt & ~0x1;
+
+ status = g_exe_format_translate_address_into_vmpa(G_EXE_FORMAT(format), final_virt, &addr);
+ if (!status) continue;
- init_vmpa(&addr, VMPA_NO_PHYSICAL, virt);
init_mrange(&range, &addr, 0);
routine = try_to_demangle_routine(name);
@@ -118,6 +120,8 @@ bool load_elf_arm_relocated_symbols(GElfFormat *format, const elf_shdr *relxxx,
g_binary_symbol_attach_routine(symbol, routine);
g_binary_format_add_symbol(G_BIN_FORMAT(format), symbol);
+ /* Comptabilisation pour le désassemblage brut */
+ g_binary_format_register_code_point(G_BIN_FORMAT(format), virt, false);
/*