diff options
Diffstat (limited to 'src/arch/arm/v7/link.c')
| -rw-r--r-- | src/arch/arm/v7/link.c | 114 | 
1 files changed, 0 insertions, 114 deletions
| diff --git a/src/arch/arm/v7/link.c b/src/arch/arm/v7/link.c deleted file mode 100644 index 68cde7b..0000000 --- a/src/arch/arm/v7/link.c +++ /dev/null @@ -1,114 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * link.c - édition des liens après la phase de désassemblage ARM v7 - * - * Copyright (C) 2014-2017 Cyrille Bagard - * - *  This file is part of Chrysalide. - * - *  Chrysalide is free software; you can redistribute it and/or modify - *  it under the terms of the GNU General Public License as published by - *  the Free Software Foundation; either version 3 of the License, or - *  (at your option) any later version. - * - *  Chrysalide is distributed in the hope that it will be useful, - *  but WITHOUT ANY WARRANTY; without even the implied warranty of - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - *  GNU General Public License for more details. - * - *  You should have received a copy of the GNU General Public License - *  along with Foobar.  If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "link.h" - - -#include <assert.h> - - -#include "operands/reglist.h" -#include "../register.h" - - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : instr   = instruction ARM à traiter.                         * -*                proc    = représentation de l'architecture utilisée.         * -*                context = contexte associé à la phase de désassemblage.      * -*                format  = acès aux données du binaire d'origine.             * -*                                                                             * -*  Description : Encadre les sauts à partir de registres ARMv7.               * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -void handle_armv7_conditional_branch_from_register(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) -{ -    GArchOperand *op;                       /* Opérande numérique en place */ -    GArmRegister *reg;                      /* Registre matériel manipulé  */ - -    op = g_arch_instruction_get_operand(instr, 0); -    assert(G_IS_REGISTER_OPERAND(op)); - -    reg = G_ARM_REGISTER(g_register_operand_get_register(G_REGISTER_OPERAND(op))); - -    if (g_arm_register_get_index(reg) == 14 /* lr */) -        g_arch_instruction_set_flag(instr, AIF_RETURN_POINT); - -    else -        g_arch_instruction_set_flag(instr, AIF_RETURN_POINT);   /* FIXME : jump inconnu ! */ - -    g_object_unref(G_OBJECT(reg)); - -    g_object_unref(G_OBJECT(op)); - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : instr   = instruction ARM à traiter.                         * -*                proc    = représentation de l'architecture utilisée.         * -*                context = contexte associé à la phase de désassemblage.      * -*                format  = acès aux données du binaire d'origine.             * -*                                                                             * -*  Description : Détecte les fins de procédures à base d'instructions 'pop'.  * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -void handle_armv7_return_from_pop(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) -{ -    GArchOperand *op;                       /* Opérande numérique en place */ -    GArmV7RegListOperand *reglist;          /* Autre version de l'instance */ -    size_t count;                           /* Nombre de registres présents*/ -    size_t i;                               /* Boucle de parcours          */ -    GArmRegister *reg;                      /* Registre matériel manipulé  */ - -    op = g_arch_instruction_get_operand(instr, 0); -    assert(G_IS_ARMV7_REGLIST_OPERAND(op)); - -    reglist = G_ARMV7_REGLIST_OPERAND(op); - -    count = g_armv7_reglist_count_registers(reglist); - -    for (i = 0; i < count; i++) -    { -        reg = G_ARM_REGISTER(g_armv7_reglist_operand_get_register(reglist, i)); - -        if (g_arm_register_get_index(reg) == 15 /* pc */) -            g_arch_instruction_set_flag(instr, AIF_RETURN_POINT); - -    } - -    g_object_unref(G_OBJECT(op)); - -} | 
