diff options
Diffstat (limited to 'src/arch/arm/v7/link.c')
-rw-r--r-- | src/arch/arm/v7/link.c | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/src/arch/arm/v7/link.c b/src/arch/arm/v7/link.c index 69b43bc..fff0944 100644 --- a/src/arch/arm/v7/link.c +++ b/src/arch/arm/v7/link.c @@ -27,15 +27,13 @@ #include <assert.h> -#include "context.h" - - /****************************************************************************** * * * Paramètres : instr = instruction ARMv7 à traiter. * * context = contexte associé à la phase de désassemblage. * * format = acès aux données du binaire d'origine. * +* iset = type de jeu d'instructions courant à faire suivre. * * * * Description : Complète un désassemblage accompli pour une instruction. * * * @@ -45,14 +43,13 @@ * * ******************************************************************************/ -void handle_links_with_thumb_instruction_bl(GArchInstruction *instr, GArmV7Context *context, GBinFormat *format) +void handle_links_with_instruction_bl_with_orig(GArchInstruction *instr, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) { const mrange_t *range; /* Emplacementt d'instruction */ virt_t pc; /* Position dans l'exécution */ GArchOperand *op; /* Opérande numérique en place */ int32_t offset; /* Décallage encodé en dur */ virt_t target; /* Adresse virtuelle visée */ - ArmV7InstrSet iset; /* Type de jeu courant */ range = g_arch_instruction_get_range(instr); @@ -72,11 +69,7 @@ void handle_links_with_thumb_instruction_bl(GArchInstruction *instr, GArmV7Conte if (g_imm_operand_get_value(G_IMM_OPERAND(op), MDS_32_BITS_SIGNED, &offset)) g_imm_operand_set_value(G_IMM_OPERAND(op), MDS_32_BITS_UNSIGNED, pc + offset); - - //printf("[@ 0x%08x] Add 0x%08x to %p\n", (uint32_t)get_virt_addr(get_mrange_addr(range)), (uint32_t)(pc + offset), context); - target = pc + offset; - iset = g_armv7_context_find_encoding(context, get_virt_addr(get_mrange_addr(range))); g_armv7_context_define_encoding(context, target, iset); @@ -88,6 +81,7 @@ void handle_links_with_thumb_instruction_bl(GArchInstruction *instr, GArmV7Conte * Paramètres : instr = instruction ARMv7 à traiter. * * context = contexte associé à la phase de désassemblage. * * format = acès aux données du binaire d'origine. * +* iset = type de jeu d'instructions courant à inverser. * * * * Description : Complète un désassemblage accompli pour une instruction. * * * @@ -97,14 +91,13 @@ void handle_links_with_thumb_instruction_bl(GArchInstruction *instr, GArmV7Conte * * ******************************************************************************/ -void handle_links_with_thumb_instruction_blx(GArchInstruction *instr, GArmV7Context *context, GBinFormat *format) +void handle_links_with_instruction_blx_with_dest(GArchInstruction *instr, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) { const mrange_t *range; /* Emplacementt d'instruction */ virt_t pc; /* Position dans l'exécution */ GArchOperand *op; /* Opérande numérique en place */ int32_t offset; /* Décallage encodé en dur */ virt_t target; /* Adresse virtuelle visée */ - ArmV7InstrSet iset; /* Type de jeu courant */ range = g_arch_instruction_get_range(instr); @@ -125,19 +118,8 @@ void handle_links_with_thumb_instruction_blx(GArchInstruction *instr, GArmV7Cont if (g_imm_operand_get_value(G_IMM_OPERAND(op), MDS_32_BITS_SIGNED, &offset)) g_imm_operand_set_value(G_IMM_OPERAND(op), MDS_32_BITS_UNSIGNED, pc + offset); - - //printf("[@ 0x%08x] Add 0x%08x to %p\n", (uint32_t)get_virt_addr(get_mrange_addr(range)), (uint32_t)(pc + offset), context); - target = pc + offset; - iset = g_armv7_context_find_encoding(context, get_virt_addr(get_mrange_addr(range))); - - printf(" --link-- @ 0x%08x iset = %u\n", (unsigned int)target, (unsigned int)iset); - - if (iset == AV7IS_ARM) - g_armv7_context_define_encoding(context, target, AV7IS_THUMB); - else - g_armv7_context_define_encoding(context, target, AV7IS_ARM); - + g_armv7_context_define_encoding(context, target, iset); } |