diff options
Diffstat (limited to 'src/analysis')
| -rw-r--r-- | src/analysis/binary-int.h | 4 | ||||
| -rw-r--r-- | src/analysis/binary.c | 315 | ||||
| -rw-r--r-- | src/analysis/binary.h | 7 | ||||
| -rw-r--r-- | src/analysis/disass/disassembler.c | 16 | ||||
| -rw-r--r-- | src/analysis/disass/disassembler.h | 3 | ||||
| -rw-r--r-- | src/analysis/disass/macro.c | 1 | 
6 files changed, 7 insertions, 339 deletions
diff --git a/src/analysis/binary-int.h b/src/analysis/binary-int.h index fa06a25..ec98bf9 100644 --- a/src/analysis/binary-int.h +++ b/src/analysis/binary-int.h @@ -67,10 +67,6 @@ struct _GLoadedBinary      GExeFormat *format;                     /* Format du binaire           */      GArchProcessor *proc;                   /* Architecture du binaire     */ -    BinaryPartModel model;                  /* Modèle de sélection         */ -    GBinPart **parts[BPM_COUNT];            /* Parties binaires à analyser */ -    size_t parts_count[BPM_COUNT];          /* Quantité de ces parties     */ -      GArchInstruction *instrs;               /* Instructions d'assemblage   */      GCodeBuffer *disass_buffer;             /* Instructions lisibles       */      GCodeBuffer **dec_buffers;              /* Sources sous forme de texte */ diff --git a/src/analysis/binary.c b/src/analysis/binary.c index 0c7a71c..35f7acd 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -62,12 +62,6 @@ static void g_loaded_binary_dispose(GLoadedBinary *);  /* Procède à la libération totale de la mémoire. */  static void g_loaded_binary_finalize(GLoadedBinary *); -/* Charge les parties intéressantes du binaire à partir d'XML. */ -static bool g_loaded_binary_load_parts_from_xml(GLoadedBinary *, xmlXPathContextPtr, const char *); - -/* Ecrit les parties de valeur du binaire dans un fichier XML. */ -static bool g_loaded_binary_save_parts(const GLoadedBinary *, xmlDocPtr, xmlXPathContextPtr, const char *); -  /* Acquitte la fin d'un désasemblage différé et complet. */  static void ack_completed_disassembly(GDelayedDisassembly *, GLoadedBinary *); @@ -281,11 +275,6 @@ GLoadedBinary *g_loaded_binary_new_from_xml(xmlXPathContextPtr context, const ch -    /* -    if (!g_loaded_binary_load_parts_from_xml(result, context, path)) -        goto glbnfx_error; -    */ -      printf("data :: %p  length :: %d\n", result->bin_data, result->bin_length); @@ -405,229 +394,6 @@ bool g_loaded_binary_save(const GLoadedBinary *binary, xmlDocPtr xdoc, xmlXPathC      result = g_loaded_binary_save_storage(binary, xdoc, context, path); -    /* Parties à désassembler */ - -    result = g_loaded_binary_save_parts(binary, xdoc, context, path); - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : context = contexte pour les recherches XPath.                * -*                path    = chemin d'accès au noeud XML à lire.                * -*                                                                             * -*  Description : Charge les parties intéressantes du binaire à partir d'XML.  * -*                                                                             * -*  Retour      : Bilan de l'opération.                                        * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static bool g_loaded_binary_load_parts_from_xml(GLoadedBinary *binary, xmlXPathContextPtr context, const char *path) -{ -    bool result;                            /* Bilan à retourner           */ -    char *access;                           /* Chemin pour une sous-config.*/ -    xmlXPathObjectPtr xobjects;             /* Cible d'une recherche       */ -    int i;                                  /* Boucle de parcours          */ -    GBinPart *part;                         /* Partie binaire à traiter    */ -    off_t offset;                           /* Position de cette partie    */ -    vmpa_t addr;                            /* Adresse correspondante      */ - -    result = NULL; - -    /* Parties à désassembler : default */ - -    access = strdup(path); -    access = stradd(access, "/BinParts/Default/Part"); - -    xobjects = get_node_xpath_object(context, access); - -    for (i = 0; i < XPATH_OBJ_NODES_COUNT(xobjects); i++) -    { -        part = g_binary_part_load_from_xml(NODE_FROM_PATH_OBJ(xobjects, i)); - -        if (part != NULL) -        { -            g_binary_part_get_values(part, &offset, NULL, NULL); - -            if (!g_exe_format_translate_offset_into_address(G_EXE_FORMAT(binary->format), offset, &addr)) -            { -                g_object_unref(G_OBJECT(part)); -                continue; -            } - -            binary->parts_count[BPM_DEFAULT]++; -            binary->parts[BPM_DEFAULT] = (GBinPart **)realloc(binary->parts[BPM_DEFAULT], -                                                              binary->parts_count[BPM_DEFAULT] * sizeof(GBinPart *)); - -            binary->parts[BPM_DEFAULT][binary->parts_count[BPM_DEFAULT] - 1] = part; - -        } - -    } - -    if(xobjects != NULL) -        xmlXPathFreeObject(xobjects); - -    free(access); - -    qsort(binary->parts[BPM_DEFAULT], binary->parts_count[BPM_DEFAULT], -          sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare); - -    /* Parties à désassembler : routines */ - -    access = strdup(path); -    access = stradd(access, "/BinParts/Routines/Part"); - -    xobjects = get_node_xpath_object(context, access); - -    for (i = 0; i < XPATH_OBJ_NODES_COUNT(xobjects); i++) -    { -        part = g_binary_part_load_from_xml(NODE_FROM_PATH_OBJ(xobjects, i)); - -        if (part != NULL) -        { -            g_binary_part_get_values(part, &offset, NULL, NULL); - -            if (!g_exe_format_translate_offset_into_address(G_EXE_FORMAT(binary->format), offset, &addr)) -            { -                g_object_unref(G_OBJECT(part)); -                continue; -            } -            else g_binary_part_set_address(part, addr); - -            binary->parts_count[BPM_ROUTINES]++; -            binary->parts[BPM_ROUTINES] = (GBinPart **)realloc(binary->parts[BPM_ROUTINES], -                                                               binary->parts_count[BPM_ROUTINES] * sizeof(GBinPart *)); - -            binary->parts[BPM_ROUTINES][binary->parts_count[BPM_ROUTINES] - 1] = part; - -        } - -    } - -    if(xobjects != NULL) -        xmlXPathFreeObject(xobjects); - -    free(access); - -    qsort(binary->parts[BPM_ROUTINES], binary->parts_count[BPM_ROUTINES], -          sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare); - -    /* Parties à désassembler : utilisateur */ - -    access = strdup(path); -    access = stradd(access, "/BinParts/User/Part"); - -    xobjects = get_node_xpath_object(context, access); - -    for (i = 0; i < XPATH_OBJ_NODES_COUNT(xobjects); i++) -    { -        part = g_binary_part_load_from_xml(NODE_FROM_PATH_OBJ(xobjects, i)); - -        if (part != NULL) -        { -            g_binary_part_get_values(part, &offset, NULL, NULL); - -            if (!g_exe_format_translate_offset_into_address(G_EXE_FORMAT(binary->format), offset, &addr)) -            { -                g_object_unref(G_OBJECT(part)); -                continue; -            } - -            binary->parts_count[BPM_USER]++; -            binary->parts[BPM_USER] = (GBinPart **)realloc(binary->parts[BPM_USER], -                                                           binary->parts_count[BPM_USER] * sizeof(GBinPart *)); - -            binary->parts[BPM_USER][binary->parts_count[BPM_USER] - 1] = part; - -        } - -    } - -    if(xobjects != NULL) -        xmlXPathFreeObject(xobjects); - -    free(access); - -    qsort(binary->parts[BPM_USER], binary->parts_count[BPM_USER], -          sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare); - -    return result; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : binary  = élément binaire à traiter.                         * -*                xdoc    = structure XML en cours d'édition.                  * -*                context = contexte à utiliser pour les recherches.           * -*                path    = chemin d'accès réservé au binaire.                 * -*                                                                             * -*  Description : Ecrit les parties de valeur du binaire dans un fichier XML.  * -*                                                                             * -*  Retour      : true si l'opération a bien tourné, false sinon.              * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static bool g_loaded_binary_save_parts(const GLoadedBinary *binary, xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path) -{ -    bool result;                            /* Bilan à faire remonter      */ -    char *access;                           /* Chemin d'accès à un élément */ -    xmlNodePtr node;                        /* Point d'insertion XML       */ -    size_t i;                               /* Boucle de parcours          */ - -    result = true; - -    if (binary->parts_count[BPM_DEFAULT] > 0) -    { -        access = strdup(path); -        access = stradd(access, "/BinParts/Default"); - -        node = ensure_node_exist(xdoc, context, access); - -        free(access); - -        for (i = 0; i < binary->parts_count[BPM_DEFAULT] && result; i++) -            result &= g_binary_part_save_to_xml(binary->parts[BPM_DEFAULT][i], xdoc, node); - -    } - -    if (binary->parts_count[BPM_ROUTINES] > 0) -    { -        access = strdup(path); -        access = stradd(access, "/BinParts/Routines"); - -        node = ensure_node_exist(xdoc, context, access); - -        free(access); - -        for (i = 0; i < binary->parts_count[BPM_ROUTINES] && result; i++) -            result &= g_binary_part_save_to_xml(binary->parts[BPM_ROUTINES][i], xdoc, node); - -    } - -    if (binary->parts_count[BPM_USER] > 0) -    { -        access = strdup(path); -        access = stradd(access, "/BinParts/User"); - -        node = ensure_node_exist(xdoc, context, access); - -        free(access); - -        for (i = 0; i < binary->parts_count[BPM_USER] && result; i++) -            result &= g_binary_part_save_to_xml(binary->parts[BPM_USER][i], xdoc, node); - -    } -      return result;  } @@ -1085,56 +851,6 @@ bool g_loaded_binary_add_to_collection(GLoadedBinary *binary, DBFeatures feature - -/****************************************************************************** -*                                                                             * -*  Paramètres  : binary = élément binaire à consulter.                        * -*                parts  = liste des zones binaires à analyser.                * -*                model  = modèle de sélection des zones.                      * -*                count  = quantité de zones listées.                          * -*                                                                             * -*  Description : Définit les parties de binaire à analyser.                   * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -void g_loaded_binary_set_parts(GLoadedBinary *binary, BinaryPartModel model, GBinPart **parts, size_t count) -{ -    qsort(parts, count, sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare); - -    binary->parts[model] = parts; -    binary->parts_count[model] = count; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : binary = élément binaire à consulter.                        * -*                model  = modèle de sélection des zones. [OUT]                * -*                count  = quantité de zones listées. [OUT]                    * -*                                                                             * -*  Description : Fournit les parties de binaire analysées.                    * -*                                                                             * -*  Retour      : Zones binaires à analyser.                                   * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -GBinPart ***g_loaded_binary_get_parts(const GLoadedBinary *binary, BinaryPartModel *model, size_t **count) -{ -    *model = binary->model; -    *count = binary->parts_count; - -    return binary->parts; - -} - -  /******************************************************************************  *                                                                             *  *  Paramètres  : binary = élément binaire à traiter.                          * @@ -1149,9 +865,6 @@ GBinPart ***g_loaded_binary_get_parts(const GLoadedBinary *binary, BinaryPartMod  void g_loaded_binary_analyse(GLoadedBinary *binary)  { -    GBinPart **parts;                       /* Parties d'élément binaire   */ -    size_t parts_count;                     /* Nombre de ces parties       */ -      /* Détermination de l'identifiant */      /* déplacé @@ -1165,33 +878,7 @@ void g_loaded_binary_analyse(GLoadedBinary *binary) - -    if (binary->parts_count[BPM_ROUTINES] > 0) -        binary->model = BPM_ROUTINES; - - -    if (binary->parts[binary->model] != NULL) -    { -        parts = binary->parts[binary->model]; -        parts_count = binary->parts_count[binary->model]; -    } -    else -    { -        if (binary->parts[BPM_DEFAULT] != NULL) -        { -            parts = binary->parts[BPM_DEFAULT]; -            parts_count = binary->parts_count[BPM_DEFAULT]; -        } -        else -        { -            parts = g_exe_format_get_parts(binary->format, &parts_count); -            qsort(parts, parts_count, sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare); -        } -    } - -    disassemble_binary(binary, parts, parts_count, -                       &binary->instrs, &binary->disass_buffer, -                       ack_completed_disassembly); +    disassemble_binary(binary, &binary->instrs, &binary->disass_buffer, ack_completed_disassembly);      /* TODO : remme ! */      //ack_completed_disassembly(NULL, binary); diff --git a/src/analysis/binary.h b/src/analysis/binary.h index 8574f28..8ce64cb 100644 --- a/src/analysis/binary.h +++ b/src/analysis/binary.h @@ -141,13 +141,6 @@ bool g_loaded_binary_add_to_collection(GLoadedBinary *, DBFeatures, GDbItem *); -/* Définit les parties de binaire à analyser. */ - -void g_loaded_binary_set_parts(GLoadedBinary *, BinaryPartModel, GBinPart **, size_t); - -/* Fournit les parties de binaire analysées. */ -GBinPart ***g_loaded_binary_get_parts(const GLoadedBinary *, BinaryPartModel *, size_t **); -  /* Lance l'analyse d'un élément binaire chargé. */  void g_loaded_binary_analyse(GLoadedBinary *); diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c index 126c116..ac6eb5b 100644 --- a/src/analysis/disass/disassembler.c +++ b/src/analysis/disass/disassembler.c @@ -58,9 +58,6 @@ struct _GDelayedDisassembly      GLoadedBinary *binary;                  /* Destinataire final          */      GExeFormat *format;                     /* Format du binaire représenté*/ -    GBinPart **parts;                       /* Parties binaires à traiter  */ -    size_t count;                           /* Nombre de ces parties       */ -      GArchInstruction **instrs;              /* Instructions résultantes    */      GCodeBuffer *buffer;                    /* Tampon pour le rendu        */ @@ -81,7 +78,7 @@ static void g_delayed_disassembly_class_init(GDelayedDisassemblyClass *);  static void g_delayed_disassembly_init(GDelayedDisassembly *);  /* Crée une tâche de désassemblage différé. */ -static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *, GBinPart **, size_t, GArchInstruction **, GCodeBuffer *); +static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *, GArchInstruction **, GCodeBuffer *);  /* Assure le désassemblage en différé. */  static void g_delayed_disassembly_process(GDelayedDisassembly *, GtkExtStatusBar *); @@ -146,8 +143,6 @@ static void g_delayed_disassembly_init(GDelayedDisassembly *disass)  *                                                                             *  *  Paramètres  : binary = binaire chargé en attente des résultats.            *  *                format = format du binaire représenté.                       * -*                parts  = parties binaires à désassembler.                    * -*                count  = nombre de parties à traiter.                        *  *                instrs = emplacement pour la liste d'instructions.           *  *                buffer = tampon de sortie pour les instructions.             *  *                                                                             * @@ -159,7 +154,7 @@ static void g_delayed_disassembly_init(GDelayedDisassembly *disass)  *                                                                             *  ******************************************************************************/ -static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GBinPart **parts, size_t count, GArchInstruction **instrs, GCodeBuffer *buffer) +static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GArchInstruction **instrs, GCodeBuffer *buffer)  {      GDelayedDisassembly *result;            /* Tâche à retourner           */ @@ -168,9 +163,6 @@ static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GBi      result->binary = binary;      result->format = g_loaded_binary_get_format(binary); -    result->parts = parts; -    result->count = count; -      result->instrs = instrs;      result->buffer = buffer; @@ -538,7 +530,7 @@ static void build_disass_prologue(GCodeBuffer *buffer, const char *filename, con  *                                                                             *  ******************************************************************************/ -void disassemble_binary(GLoadedBinary *binary, GBinPart **parts, size_t parts_count, GArchInstruction **instrs, GCodeBuffer **buffer, disassembly_ack_fc ack) +void disassemble_binary(GLoadedBinary *binary, GArchInstruction **instrs, GCodeBuffer **buffer, disassembly_ack_fc ack)  {      const uint8_t *data;                    /* Données binaires brutes     */      off_t length;                           /* Quantité de ces données     */ @@ -550,7 +542,7 @@ void disassemble_binary(GLoadedBinary *binary, GBinPart **parts, size_t parts_co      data = g_loaded_binary_get_data(binary, &length);      build_disass_prologue(*buffer, g_loaded_binary_get_name(binary, true), data, length); -    disass = g_delayed_disassembly_new(binary, parts, parts_count, instrs, *buffer); +    disass = g_delayed_disassembly_new(binary, instrs, *buffer);      g_signal_connect(disass, "work-completed", G_CALLBACK(ack), binary);      queue = get_work_queue(); diff --git a/src/analysis/disass/disassembler.h b/src/analysis/disass/disassembler.h index 46bd3cc..4e459a1 100644 --- a/src/analysis/disass/disassembler.h +++ b/src/analysis/disass/disassembler.h @@ -26,7 +26,6 @@  #include "../binary.h" -#include "../../format/part.h" @@ -60,7 +59,7 @@ GType g_delayed_disassembly_get_type(void);  typedef void (* disassembly_ack_fc) (GDelayedDisassembly *, GLoadedBinary *);  /* Procède à la décompilation des routines d'un fichier donné. */ -void disassemble_binary(GLoadedBinary *, GBinPart **parts, size_t parts_count, GArchInstruction **, GCodeBuffer **, disassembly_ack_fc); +void disassemble_binary(GLoadedBinary *, GArchInstruction **, GCodeBuffer **, disassembly_ack_fc); diff --git a/src/analysis/disass/macro.c b/src/analysis/disass/macro.c index 9addf1e..3745f25 100644 --- a/src/analysis/disass/macro.c +++ b/src/analysis/disass/macro.c @@ -25,6 +25,7 @@  #include <malloc.h> +#include <stdlib.h>  #include <string.h>  | 
