diff options
Diffstat (limited to 'src/analysis')
| -rw-r--r-- | src/analysis/disass/fetch.c | 27 | ||||
| -rw-r--r-- | src/analysis/disass/output.c | 2 | ||||
| -rw-r--r-- | src/analysis/routine.c | 30 | ||||
| -rw-r--r-- | src/analysis/routine.h | 4 | 
4 files changed, 31 insertions, 32 deletions
| diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c index 20128aa..55ea1d4 100644 --- a/src/analysis/disass/fetch.c +++ b/src/analysis/disass/fetch.c @@ -135,22 +135,26 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt +    vmpa2t *last;                           /* Dernière bordure rencontrée */ + + +      GBinSymbol **symbols;                   /* Symboles à représenter      */      size_t sym_count;                       /* Qté de symboles présents    */      size_t i;                               /* Boucle de parcours          */ -    GArchInstruction *instr;                /* Instruction à insérer       */ - - -    vmpa2t *last;                           /* Dernière bordure rencontrée */      const vmpa2t *border;                   /* Nouvelle bordure rencontrée */      off_t length;                           /* Taille d'une partie traitée */ +    GArchInstruction *instr;                /* Instruction à insérer       */ + + +      GArchInstruction *joint;                /* Jointure entre deux lots    */ @@ -179,19 +183,26 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt +        border = g_binary_symbol_get_location(symbols[i], &length);          switch (g_binary_symbol_get_target_type(symbols[i]))          {              case STP_DATA:                  instr = g_binary_symbol_get_instruction(symbols[i]);                  g_object_ref(G_OBJECT(instr)); -                border = g_arch_instruction_get_location2(instr, &length); - -                // Utiliser : ??? -                // const vmpa2t *g_binary_symbol_get_address2(const GBinSymbol *symbol) +                break; +            case STP_ROUTINE: +                instr = load_raw_binary(binary, border, +                                        get_phy_addr(border) + length, +                                        statusbar, id);                  break; +             default: +                 printf("BADDD !\n"); +                 exit(0); +                 break; +          }          /* Traiter la diff */ diff --git a/src/analysis/disass/output.c b/src/analysis/disass/output.c index 927088f..f368796 100644 --- a/src/analysis/disass/output.c +++ b/src/analysis/disass/output.c @@ -130,7 +130,7 @@ void print_disassembled_instructions(GCodeBuffer *buffer, const GExeFormat *form          if (sym_index < sym_count)          {              iaddr = g_arch_instruction_get_location2(iter, NULL); -            saddr = g_binary_symbol_get_address2(symbols[sym_index]); +            saddr = g_binary_symbol_get_location(symbols[sym_index], NULL);              if (cmp_vmpa_by_phy(iaddr, saddr) == 0)              { diff --git a/src/analysis/routine.c b/src/analysis/routine.c index d97dfc7..eebcb69 100644 --- a/src/analysis/routine.c +++ b/src/analysis/routine.c @@ -38,7 +38,7 @@ struct _GBinRoutine  {      GObject parent;                         /* A laisser en premier        */ -    vmpa_t addr;                            /* Position physique/mémoire   */ +    vmpa2t addr;                           /* Position physique/mémoire   */      off_t size;                             /* Taille du code associé      */      RoutineType type;                       /* Type de routine             */ @@ -214,13 +214,7 @@ void g_binary_routine_finalize(GBinRoutine *routine)  int g_binary_routine_compare(const GBinRoutine **a, const GBinRoutine **b)  { -    int result;                             /* Bilan à renvoyer            */ - -    if ((*a)->addr < (*b)->addr) result = -1; -    else if((*a)->addr > (*b)->addr) result = 1; -    else result = 0; - -    return result; +    return cmp_vmpa(&(*a)->addr, &(*b)->addr);  } @@ -232,7 +226,7 @@ int g_binary_routine_compare(const GBinRoutine **a, const GBinRoutine **b)  *                                                                             *  *  Description : Etablit la comparaison descendante entre deux routines.      *  *                                                                             * -*  Retour      : Bilan : -1 (a < b), 0 (a == b) ou 1 (a > b).                 * +*  Retour      : Bilan : 1 (a < b), 0 (a == b) ou -1 (a > b).                 *  *                                                                             *  *  Remarques   : -                                                            *  *                                                                             * @@ -240,13 +234,7 @@ int g_binary_routine_compare(const GBinRoutine **a, const GBinRoutine **b)  int g_binary_routine_rcompare(const GBinRoutine **a, const GBinRoutine **b)  { -    int result;                             /* Bilan à renvoyer            */ - -    if ((*a)->addr > (*b)->addr) result = -1; -    else if((*a)->addr < (*b)->addr) result = 1; -    else result = 0; - -    return result; +    return (-1) * cmp_vmpa(&(*a)->addr, &(*b)->addr);  } @@ -264,9 +252,9 @@ int g_binary_routine_rcompare(const GBinRoutine **a, const GBinRoutine **b)  *                                                                             *  ******************************************************************************/ -void g_binary_routine_set_address(GBinRoutine *routine, vmpa_t addr) +void g_binary_routine_set_address(GBinRoutine *routine, const vmpa2t *addr)  { -    routine->addr = addr; +    copy_vmpa(&routine->addr, addr);  } @@ -283,9 +271,9 @@ void g_binary_routine_set_address(GBinRoutine *routine, vmpa_t addr)  *                                                                             *  ******************************************************************************/ -vmpa_t g_binary_routine_get_address(const GBinRoutine *routine) +const vmpa2t *g_binary_routine_get_address(const GBinRoutine *routine)  { -    return routine->addr; +    return &routine->addr;  } @@ -293,7 +281,7 @@ vmpa_t g_binary_routine_get_address(const GBinRoutine *routine)  /******************************************************************************  *                                                                             *  *  Paramètres  : routine = routine à mettre à jour.                           * -*                addr    = taille du code associé.                            * +*                size    = taille du code associé.                            *  *                                                                             *  *  Description : Définit la taille du code d'une routine.                     *  *                                                                             * diff --git a/src/analysis/routine.h b/src/analysis/routine.h index de1b6ba..29f6e63 100644 --- a/src/analysis/routine.h +++ b/src/analysis/routine.h @@ -87,10 +87,10 @@ int g_binary_routine_compare(const GBinRoutine **, const GBinRoutine **);  int g_binary_routine_rcompare(const GBinRoutine **, const GBinRoutine **);  /* Définit la position physique / en mémoire d'une routine. */ -void g_binary_routine_set_address(GBinRoutine *, vmpa_t); +void g_binary_routine_set_address(GBinRoutine *, const vmpa2t *);  /* Fournit la position physique / en mémoire d'une routine. */ -vmpa_t g_binary_routine_get_address(const GBinRoutine *); +const vmpa2t *g_binary_routine_get_address(const GBinRoutine *);  /* Définit la taille du code d'une routine. */  void g_binary_routine_set_size(GBinRoutine *, off_t); | 
