From cb36603eb37330ab6c956095c1ce175acb751e03 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Sun, 14 May 2017 21:19:11 +0200 Subject: Begun to clean the symbol interface. --- ChangeLog | 24 +++++ plugins/pychrysa/format/symbol.c | 208 --------------------------------------- plugins/stackvars/stackvars.c | 3 +- src/analysis/decomp/decompiler.c | 3 +- src/analysis/disass/output.c | 32 ++---- src/analysis/routine.c | 50 +--------- src/analysis/routine.h | 6 -- src/format/Makefile.am | 1 + src/format/symbol-int.h | 60 +++++++++++ src/format/symbol.c | 202 +------------------------------------ src/format/symbol.h | 54 +--------- 11 files changed, 104 insertions(+), 539 deletions(-) create mode 100644 src/format/symbol-int.h diff --git a/ChangeLog b/ChangeLog index d003fb6..640055d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,29 @@ 17-05-14 Cyrille Bagard + * plugins/pychrysa/format/symbol.c: + Delete access to the removed features. + + * plugins/stackvars/stackvars.c: + * src/analysis/decomp/decompiler.c: + * src/analysis/disass/output.c: + Update code. + + * src/analysis/routine.c: + * src/analysis/routine.h: + Make routines inherit from symbols. + + * src/format/Makefile.am: + Add the 'symbol-int.h' file to libformat_la_SOURCES. + + * src/format/symbol-int.h: + New entries: allow to inherit from the symbol object. + + * src/format/symbol.c: + * src/format/symbol.h: + Begin to clean the symbol interface. + +17-05-14 Cyrille Bagard + * configure.ac: Add the new Makefile from the 'plugins/readmc' directory. diff --git a/plugins/pychrysa/format/symbol.c b/plugins/pychrysa/format/symbol.c index 75f226a..008aeb3 100644 --- a/plugins/pychrysa/format/symbol.c +++ b/plugins/pychrysa/format/symbol.c @@ -48,15 +48,9 @@ static PyObject *py_binary_symbol_richcompare(PyObject *, PyObject *, int); /* Définit un autre nom pour le symbole. */ static PyObject *py_binary_symbol_set_alt_label(PyObject *, PyObject *); -/* Raffine la définition de l'emplacement d'un symbole. */ -static PyObject *py_binary_symbol_fix_range(PyObject *, PyObject *); - /* Attache la routine associée au symbole. */ static PyObject *py_binary_symbol_attach_routine(PyObject *, PyObject *); -/* Attache l'instruction associée au symbole. */ -static PyObject *py_binary_symbol_attach_instruction(PyObject *, PyObject *); - /* Fournit le type du symbole. */ static PyObject *py_binary_symbol_get_target_type(PyObject *, void *); @@ -69,15 +63,6 @@ static PyObject *py_binary_symbol_get_range(PyObject *, void *); /* Fournit l'éventuelle routine associée au symbole. */ static PyObject *py_binary_symbol_get_routine(PyObject *, void *); -/* Fournit l'éventuelle instruction associée au symbole. */ -static PyObject *py_binary_symbol_get_instruction(PyObject *, void *); - -/* Fournit l'éventuel commentaire associé au symbole. */ -static PyObject *py_binary_symbol_get_comment(PyObject *, void *); - -/* Ajoute un commentaire facultatif au symbole. */ -static int py_binary_symbol_set_comment(PyObject *, PyObject *, void *); - /* Définit les constantes pour les symboles binaires. */ static bool py_binary_symbol_define_constants(PyTypeObject *); @@ -204,39 +189,6 @@ static PyObject *py_binary_symbol_set_alt_label(PyObject *self, PyObject *args) * Paramètres : self = classe représentant un binaire. * * args = arguments fournis à l'appel. * * * -* Description : Raffine la définition de l'emplacement d'un symbole. * -* * -* Retour : None. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_binary_symbol_fix_range(PyObject *self, PyObject *args) -{ - PyObject *py_vmpa; /* Localisation version Python */ - int ret; /* Bilan de lecture des args. */ - GBinSymbol *symbol; /* Elément à consulter */ - - ret = PyArg_ParseTuple(args, "O", &py_vmpa); - if (!ret) return NULL; - - ret = PyObject_IsInstance(py_vmpa, (PyObject *)get_python_vmpa_type()); - if (!ret) return NULL; - - symbol = G_BIN_SYMBOL(pygobject_get(self)); - g_binary_symbol_fix_range(symbol, get_internal_vmpa(py_vmpa)); - - Py_RETURN_NONE; - -} - - -/****************************************************************************** -* * -* Paramètres : self = classe représentant un binaire. * -* args = arguments fournis à l'appel. * -* * * Description : Attache la routine associée au symbole. * * * * Retour : None. * @@ -270,42 +222,6 @@ static PyObject *py_binary_symbol_attach_routine(PyObject *self, PyObject *args) /****************************************************************************** * * -* Paramètres : self = classe représentant un binaire. * -* args = arguments fournis à l'appel. * -* * -* Description : Attache l'instruction associée au symbole. * -* * -* Retour : None. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_binary_symbol_attach_instruction(PyObject *self, PyObject *args) -{ - PyObject *py_instr; /* Instruction version Python */ - int ret; /* Bilan de lecture des args. */ - GBinSymbol *symbol; /* Elément à consulter */ - GArchInstruction *instr; /* Instruction à attacher */ - - ret = PyArg_ParseTuple(args, "O", &py_instr); - if (!ret) return NULL; - - ret = PyObject_IsInstance(py_instr, (PyObject *)get_python_arch_instruction_type()); - if (!ret) return NULL; - - symbol = G_BIN_SYMBOL(pygobject_get(self)); - instr = G_ARCH_INSTRUCTION(pygobject_get(py_instr)); - - g_binary_symbol_attach_instruction(symbol, instr); - - Py_RETURN_NONE; - -} - - -/****************************************************************************** -* * * Paramètres : self = objet Python concerné par l'appel. * * closure = non utilisé ici. * * * @@ -427,112 +343,6 @@ static PyObject *py_binary_symbol_get_routine(PyObject *self, void *closure) } - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit l'éventuelle instruction associée au symbole. * -* * -* Retour : Instance en place ou None si aucune. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_binary_symbol_get_instruction(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GBinSymbol *symbol; /* Elément à consulter */ - GArchInstruction *instr; /* Routine attachée */ - - symbol = G_BIN_SYMBOL(pygobject_get(self)); - instr = g_binary_symbol_get_instruction(symbol); - - result = pygobject_new(G_OBJECT(instr)); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* closure = non utilisé ici. * -* * -* Description : Fournit l'éventuel commentaire associé au symbole. * -* * -* Retour : Instance Python du commentaire GLib ou None si aucun. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_binary_symbol_get_comment(PyObject *self, void *closure) -{ - PyObject *result; /* Valeur à retourner */ - GBinSymbol *symbol; /* Elément à consulter */ - GDbComment *comment; /* Commentaire à associé */ - - symbol = G_BIN_SYMBOL(pygobject_get(self)); - comment = g_binary_symbol_get_comment(symbol); - - if (comment != NULL) - result = pygobject_new(G_OBJECT(comment)); - else - { - result = Py_None; - Py_INCREF(result); - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* value = valeur fournie à intégrer ou prendre en compte. * -* closure = non utilisé ici. * -* * -* Description : Ajoute un commentaire facultatif au symbole. * -* * -* Retour : Bilan de l'opération pour Python. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static int py_binary_symbol_set_comment(PyObject *self, PyObject *value, void *closure) -{ - GBinSymbol *symbol; /* Elément à consulter */ - int ret; /* Bilan de lecture des args. */ - GDbComment *comment; /* Commentaire à associer */ - - symbol = G_BIN_SYMBOL(pygobject_get(self)); - - if (value == Py_None) - g_binary_symbol_set_comment(symbol, NULL); - - else - { - ret = PyObject_IsInstance(value, (PyObject *)get_python_db_comment_type()); - if (!ret) return -1; - - comment = G_DB_COMMENT(pygobject_get(value)); - - g_binary_symbol_set_comment(symbol, comment); - - } - - return 0; - -} - - /****************************************************************************** * * * Paramètres : obj_type = type dont le dictionnaire est à compléter. * @@ -586,20 +396,10 @@ PyTypeObject *get_python_binary_symbol_type(void) "set_alt_label($self, alt, /)\n--\n\nSet an alternative label for the symbol." }, { - "fix_range", py_binary_symbol_fix_range, - METH_VARARGS, - "fix_range($self, range, /)\n--\n\nRefine the location of the current symbol." - }, - { "attach_routine", py_binary_symbol_attach_routine, METH_VARARGS, "attach_routine($self, instr, /)\n--\n\nAttach a provided routine to the current symbol." }, - { - "attach_instruction", py_binary_symbol_attach_instruction, - METH_VARARGS, - "attach_instruction($self, instr, /)\n--\n\nAttach a provided instruction to the current symbol." - }, { NULL } }; @@ -620,14 +420,6 @@ PyTypeObject *get_python_binary_symbol_type(void) "routine", py_binary_symbol_get_routine, NULL, "Potential routine attached to the symbol.", NULL }, - { - "instruction", py_binary_symbol_get_instruction, NULL, - "Potential instruction attached to the symbol.", NULL - }, - { - "comment", py_binary_symbol_get_comment, py_binary_symbol_set_comment, - "Optional comment linked to the symbol.", NULL - }, { NULL } }; diff --git a/plugins/stackvars/stackvars.c b/plugins/stackvars/stackvars.c index 4e07035..ce9d539 100644 --- a/plugins/stackvars/stackvars.c +++ b/plugins/stackvars/stackvars.c @@ -110,7 +110,8 @@ G_MODULE_EXPORT bool execute_action_on_binary(GLoadedBinary *binary, PluginActio lines = g_loaded_binary_get_lines(binary); format = g_loaded_binary_get_format(binary); - routines = g_binary_format_get_routines(G_BIN_FORMAT(format), &routines_count); + routines = NULL;//g_binary_format_get_routines(G_BIN_FORMAT(format), &routines_count); + routines_count = 0; // for (i = 0; i < routines_count; i++) result |= replace_stack_vars_in_routine(routines[i], lines); diff --git a/src/analysis/decomp/decompiler.c b/src/analysis/decomp/decompiler.c index 0caf4e4..5b2d231 100644 --- a/src/analysis/decomp/decompiler.c +++ b/src/analysis/decomp/decompiler.c @@ -152,7 +152,8 @@ static void prepare_all_routines_for_decomp(const GLoadedBinary *binary, const c proc = NULL;//get_arch_processor_from_format(G_EXE_FORMAT(format)); - routines = g_binary_format_get_routines(G_BIN_FORMAT(format), &count); + routines = NULL; //g_binary_format_get_routines(G_BIN_FORMAT(format), &count); + count = 0; diff --git a/src/analysis/disass/output.c b/src/analysis/disass/output.c index 421cfb6..40cd12b 100644 --- a/src/analysis/disass/output.c +++ b/src/analysis/disass/output.c @@ -89,8 +89,6 @@ void print_disassembled_instructions(GBufferCache *cache, GCodingLanguage *lang, BufferLineFlags flags; /* Propriétés pour la ligne */ //mrange_t range; /* Couverture sans surface */ - GDbComment *_comment; /* Commentaire à ajouter */ - @@ -288,33 +286,21 @@ void print_disassembled_instructions(GBufferCache *cache, GCodingLanguage *lang, if (g_binary_symbol_get_target_type(symbols[sym_index]) == STP_ENTRY_POINT) flags |= BLF_ENTRYPOINT; - /* Début d'un groupe bien cohérent avec les alignements ? */ - - if (g_binary_symbol_is_block_start(symbols[sym_index])) - flags |= BLF_WIDTH_MANAGER; - - } - - g_buffer_cache_append(cache, G_LINE_GENERATOR(instr), flags); - + /** + * Début d'un groupe bien cohérent avec les alignements ? + * + * On décide que, à partir du moment où il y a un symbole, il y a + * là le début d'un nouveau bloc avec sa propre nouvelle gestion + * des largeurs, quelque soit le type du symbole en question ! + */ - - ////////////////////////////////// - if (compared == 0) - { - /* Commentaire ? */ - - _comment = g_binary_symbol_get_comment(symbols[sym_index]); - - if (_comment != NULL) - g_db_item_apply(G_DB_ITEM(_comment), binary); + flags |= BLF_WIDTH_MANAGER; sym_index++; } - /////////////////////////////////////// - + g_buffer_cache_append(cache, G_LINE_GENERATOR(instr), flags); /* Commentaire en bout de ligne ? */ diff --git a/src/analysis/routine.c b/src/analysis/routine.c index 583e151..c916c66 100644 --- a/src/analysis/routine.c +++ b/src/analysis/routine.c @@ -36,13 +36,14 @@ #include "../arch/raw.h" #include "../common/extstr.h" #include "../core/params.h" +#include "../format/symbol-int.h" /* Représentation générique de routine (instance) */ struct _GBinRoutine { - GObject parent; /* A laisser en premier */ + GBinSymbol parent; /* A laisser en premier */ mrange_t range; /* Couverture mémoire */ @@ -64,7 +65,6 @@ struct _GBinRoutine GBinVariable **locals; /* Variables locales du code */ size_t locals_count; /* Nombre de variables locales */ - GArchInstruction *instr; /* Instructions natives */ GBlockList *blocks; /* Blocs basiques d'instruct° */ //GDecInstruction *dinstr; /* Instructions décompilées */ @@ -74,7 +74,7 @@ struct _GBinRoutine /* Représentation générique de routine (classe) */ struct _GBinRoutineClass { - GObjectClass parent; /* A laisser en premier */ + GBinSymbolClass parent; /* A laisser en premier */ }; @@ -91,7 +91,7 @@ static void g_binary_routine_reset_declarator(GBinRoutine *, bool); /* Indique le type définit pour une représentation de routine. */ -G_DEFINE_TYPE(GBinRoutine, g_bin_routine, G_TYPE_OBJECT); +G_DEFINE_TYPE(GBinRoutine, g_bin_routine, G_TYPE_BIN_SYMBOL); /****************************************************************************** @@ -808,48 +808,6 @@ size_t g_binary_routine_get_var_index_from_offset(const GBinRoutine *routine, si * * * Paramètres : routine = routine à consulter. * * * -* Description : Fournit les instructions natives correspondantes. * -* * -* Retour : Ensemble d'instructions décompilées ou NULL. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GArchInstruction *g_binary_routine_get_instructions(const GBinRoutine *routine) -{ - return routine->instr; - -} - - -/****************************************************************************** -* * -* Paramètres : routine = routine à mettre à jour. * -* instr = série d'instructions à conserver. * -* * -* Description : Définit les instructions natives de la routine. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_binary_routine_set_instructions(GBinRoutine *routine, GArchInstruction *instr) -{ - if (routine->instr != NULL) - g_object_unref(G_OBJECT(routine->instr)); - - routine->instr = instr; - -} - - -/****************************************************************************** -* * -* Paramètres : routine = routine à consulter. * -* * * Description : Fournit les blocs basiques de la routine. * * * * Retour : Ensemble de blocs déterminés via les instructions. * diff --git a/src/analysis/routine.h b/src/analysis/routine.h index e880118..b040c6c 100644 --- a/src/analysis/routine.h +++ b/src/analysis/routine.h @@ -158,12 +158,6 @@ void g_binary_routine_register_if_needed(GBinRoutine *, size_t, bool); /* Donne l'indice d'une variable dans la liste d'une routine. */ size_t g_binary_routine_get_var_index_from_offset(const GBinRoutine *, size_t, bool); -/* Fournit les instructions natives correspondantes. */ -GArchInstruction *g_binary_routine_get_instructions(const GBinRoutine *); - -/* Définit les instructions natives de la routine. */ -void g_binary_routine_set_instructions(GBinRoutine *, GArchInstruction *); - /* Fournit les blocs basiques de la routine. */ GBlockList *g_binary_routine_get_basic_blocks(const GBinRoutine *); diff --git a/src/format/Makefile.am b/src/format/Makefile.am index 2fef6c6..3501dda 100644 --- a/src/format/Makefile.am +++ b/src/format/Makefile.am @@ -10,6 +10,7 @@ libformat_la_SOURCES = \ format.h format.c \ preload-int.h \ preload.h preload.c \ + symbol-int.h \ symbol.h symbol.c libformat_la_LIBADD = \ diff --git a/src/format/symbol-int.h b/src/format/symbol-int.h new file mode 100644 index 0000000..4a79a65 --- /dev/null +++ b/src/format/symbol-int.h @@ -0,0 +1,60 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * symbol-int.h - prototypes pour la définition interne des symboles dans un binaire + * + * Copyright (C) 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 . + */ + + +#ifndef _FORMAT_SYMBOL_INT_H +#define _FORMAT_SYMBOL_INT_H + + +#include "symbol.h" + + + +/* Symbole d'exécutable (instance) */ +struct _GBinSymbol +{ + GObject parent; /* A laisser en premier */ + + SymbolType type; /* Type du symbole */ + + char *alt; /* Nom alternatif */ + + union + { + GArchInstruction *instr; /* Instruction correspondante */ + GBinRoutine *routine; /* Compléments pour fonction */ + + } extra; + +}; + +/* Symbole d'exécutable (classe) */ +struct _GBinSymbolClass +{ + GObjectClass parent; /* A laisser en premier */ + +}; + + + + +#endif /* _FORMAT_SYMBOL_INT_H */ diff --git a/src/format/symbol.c b/src/format/symbol.c index 16e54ef..2611a40 100644 --- a/src/format/symbol.c +++ b/src/format/symbol.c @@ -28,6 +28,7 @@ #include +#include "symbol-int.h" #include "../glibext/linegen-int.h" @@ -35,35 +36,6 @@ /* --------------------- FONCTIONNALITES BASIQUES POUR SYMBOLES --------------------- */ -/* Symbole d'exécutable (instance) */ -struct _GBinSymbol -{ - GObject parent; /* A laisser en premier */ - - SymbolType type; /* Type du symbole */ - - bool block_start; /* Début d'un bloc ? */ - char *alt; /* Nom alternatif */ - - union - { - GArchInstruction *instr; /* Instruction correspondante */ - GBinRoutine *routine; /* Compléments pour fonction */ - - } extra; - - GDbComment *comment; /* Eventuel commentaire lié */ - -}; - -/* Symbole d'exécutable (classe) */ -struct _GBinSymbolClass -{ - GObjectClass parent; /* A laisser en premier */ - -}; - - /* Initialise la classe des symboles d'exécutables. */ static void g_binary_symbol_class_init(GBinSymbolClass *); @@ -334,65 +306,6 @@ SymbolType g_binary_symbol_get_target_type(const GBinSymbol *symbol) /****************************************************************************** * * -* Paramètres : symbol = symbole à venir compléter. * -* start = indication quant à la nature du symbole. * -* * -* Description : Définit si un symbole est susceptible de démarrer un bloc. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_binary_symbol_define_as_block_start(GBinSymbol *symbol, bool start) -{ - symbol->block_start = start; - -} - - -/****************************************************************************** -* * -* Paramètres : symbol = symbole à venir consulter. * -* * -* Description : Indique si un symbole est susceptible de démarrer un bloc. * -* * -* Retour : Capacité de rassemblement du symbole. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_binary_symbol_is_block_start(GBinSymbol *symbol) -{ - bool result; /* Statut à retourner */ - - switch (g_binary_symbol_get_target_type(symbol)) - { - case STP_ROUTINE: - case STP_OBJECT: - case STP_ENTRY_POINT: - case STP_STRING: - case STP_RO_STRING: - result = true; - break; - - default: - result = false; - break; - - } - - result |= symbol->block_start; - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : symbol = symbole à venir consulter. * * * * Description : Fournit un étiquette pour viser un symbole. * @@ -459,66 +372,6 @@ void g_binary_symbol_set_alt_label(GBinSymbol *symbol, const char *alt) /****************************************************************************** * * -* Paramètres : symbol = symbole à venir mettre à jour. * -* full = adresse dont la définition est complète. * -* * -* Description : Raffine la définition de l'emplacement d'un symbole. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_binary_symbol_fix_range(GBinSymbol *symbol, const vmpa2t *full) -{ - GArchInstruction *instr; /* Instruction associée */ - mrange_t range; /* Plage à manipuler */ - GBinRoutine *routine; /* Routine associée */ - - switch (symbol->type) - { - case STP_DATA: - case STP_RO_STRING: - - instr = g_binary_symbol_get_instruction(symbol); - - copy_mrange(&range, g_arch_instruction_get_range(instr)); - - assert(cmp_vmpa(get_mrange_addr(&range), full) == 0); - - copy_vmpa(get_mrange_addr(&range), full); - - g_arch_instruction_set_range(instr, &range); - - break; - - case STP_ROUTINE: - case STP_ENTRY_POINT: - case STP_CODE_LABEL: - - routine = g_binary_symbol_get_routine(symbol); - - copy_mrange(&range, g_binary_routine_get_range(routine)); - - assert(cmp_vmpa(get_mrange_addr(&range), full) == 0); - - copy_vmpa(get_mrange_addr(&range), full); - - g_binary_routine_set_range(routine, &range); - - break; - - default: - break; - - } - -} - - -/****************************************************************************** -* * * Paramètres : symbol = symbole à venir consulter. * * * * Description : Fournit l'emplacement où se situe un symbole. * @@ -675,59 +528,6 @@ GArchInstruction *g_binary_symbol_get_instruction(const GBinSymbol *symbol) } -/****************************************************************************** -* * -* Paramètres : symbol = symbole à venir manipuler. * -* comment = commentaire construit à propos du symbole. * -* * -* Description : Ajoute un commentaire facultatif au symbole. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_binary_symbol_set_comment(GBinSymbol *symbol, GDbComment *comment) -{ -#ifndef NDEBUG - const vmpa2t *saddr; /* Adresse du symbole */ - const vmpa2t *caddr; /* Adresse du commentaire */ -#endif - -#ifndef NDEBUG - - saddr = get_mrange_addr(g_binary_symbol_get_range(symbol)); - caddr = g_db_comment_get_address(comment); - - assert(cmp_vmpa(saddr, caddr) == 0); - -#endif - - symbol->comment = comment; - -} - - -/****************************************************************************** -* * -* Paramètres : symbol = symbole à venir consulter. * -* * -* Description : Fournit l'éventuel commentaire associé au symbole. * -* * -* Retour : Instance GLib en place ou NULL si aucune. * -* * -* Remarques : Il n'y a pas de transfert de propriété ici ! * -* * -******************************************************************************/ - -GDbComment *g_binary_symbol_get_comment(const GBinSymbol *symbol) -{ - return symbol->comment; - -} - - /* ---------------------------------------------------------------------------------- */ /* OFFRE DE CAPACITES DE GENERATION */ diff --git a/src/format/symbol.h b/src/format/symbol.h index 694a9ee..0d40529 100644 --- a/src/format/symbol.h +++ b/src/format/symbol.h @@ -89,21 +89,12 @@ int g_binary_symbol_cmp_with_vmpa(const GBinSymbol *, const vmpa2t *); /* Fournit le type du symbole. */ SymbolType g_binary_symbol_get_target_type(const GBinSymbol *); -/* Définit si un symbole est susceptible de démarrer un bloc. */ -void g_binary_symbol_define_as_block_start(GBinSymbol *, bool); - -/* Indique si un symbole est susceptible de démarrer un bloc. */ -bool g_binary_symbol_is_block_start(GBinSymbol *); - /* Fournit un étiquette pour viser un symbole. */ const char *g_binary_symbol_get_label(const GBinSymbol *); /* Définit un autre nom pour le symbole. */ void g_binary_symbol_set_alt_label(GBinSymbol *, const char *); -/* Raffine la définition de l'emplacement d'un symbole. */ -void g_binary_symbol_fix_range(GBinSymbol *, const vmpa2t *); - /* Fournit l'emplacement où se situe un symbole. */ const mrange_t *g_binary_symbol_get_range(const GBinSymbol *); @@ -122,56 +113,13 @@ GBinRoutine *g_binary_symbol_get_routine(const GBinSymbol *); /* Fournit l'éventuelle instruction associée au symbole. */ GArchInstruction *g_binary_symbol_get_instruction(const GBinSymbol *); -/* Ajoute un commentaire facultatif au symbole. */ -void g_binary_symbol_set_comment(GBinSymbol *, GDbComment *); - -/* Fournit l'éventuel commentaire associé au symbole. */ -GDbComment *g_binary_symbol_get_comment(const GBinSymbol *); - /** * Confort pour l'ajout de symboles basés sur des formats. */ -#define SET_IMM_DISPLAY(_ins, _op, _idx, _dsp) \ - do \ - { \ - GImmOperand *_imm; \ - _imm = G_IMM_OPERAND(g_arch_instruction_get_operand(_ins, _idx)); \ - g_imm_operand_set_default_display(&_imm, _dsp, G_SHARE_CONTAINER(_ins)); \ - _op = G_ARCH_OPERAND(_imm); \ - } \ - while (0) - -#define ADD_RAW_AS_SYM(_fmt, _sym, _ins, _cmt, _txt) \ - ({ \ - bool __result; \ - const vmpa2t *__addr; \ - __addr = get_mrange_addr(g_arch_instruction_get_range(_ins)); \ - _cmt = g_db_comment_new_inlined(__addr, BLF_HAS_CODE, false); \ - g_db_comment_add_static_text(_cmt, strdup(_txt)); /* ! */ \ - g_db_item_set_volatile(G_DB_ITEM(_cmt), true); \ - _sym = g_binary_symbol_new(STP_DATA); \ - g_binary_symbol_attach_instruction(_sym, _ins); \ - g_binary_symbol_set_comment(_sym, _cmt); \ - __result = g_binary_format_add_symbol(G_BIN_FORMAT(_fmt), _sym); \ - __result; \ - }) -#define ADD_RAW_AS_SYM_CST(_fmt, _sym, _ins, _cmt, _txt) \ - ({ \ - bool __result; \ - const vmpa2t *__addr; \ - __addr = get_mrange_addr(g_arch_instruction_get_range(_ins)); \ - _cmt = g_db_comment_new_inlined(__addr, BLF_HAS_CODE, false); \ - g_db_comment_add_static_text(_cmt, _txt); \ - g_db_item_set_volatile(G_DB_ITEM(_cmt), true); \ - _sym = g_binary_symbol_new(STP_DATA); \ - g_binary_symbol_attach_instruction(_sym, _ins); \ - g_binary_symbol_set_comment(_sym, _cmt); \ - __result = g_binary_format_add_symbol(G_BIN_FORMAT(_fmt), _sym); \ - __result; \ - }) + #define ADD_STR_AS_SYM(_fmt, _sym, _ins) \ ({ \ -- cgit v0.11.2-87-g4458