diff options
Diffstat (limited to 'src/format/elf/helper_arm.c')
-rw-r--r-- | src/format/elf/helper_arm.c | 14 |
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); /* |