From dcc0438ff24efd5958b8d46940eb395ff2b7ed77 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Mon, 12 Dec 2016 19:05:45 +0100 Subject: Applied some code refactoring to remove usages of GBinFormat in favor of GExeFormat. --- ChangeLog | 43 ++++++++++++++++++++++++++++++ plugins/libcsem/exit.c | 3 +++ plugins/ropgadgets/finder.c | 13 ++++----- plugins/ropgadgets/finder.h | 4 +-- plugins/ropgadgets/select.c | 30 ++++++++++----------- src/analysis/disass/area.c | 5 ++-- src/analysis/disass/area.h | 1 + src/analysis/disass/disassembler.c | 2 +- src/analysis/disass/fetch.c | 1 + src/analysis/disass/instructions.c | 6 ++--- src/analysis/disass/instructions.h | 2 +- src/arch/arm/link.c | 2 +- src/arch/arm/link.h | 3 +-- src/arch/arm/v7/fetch.c | 19 +++++++------- src/arch/arm/v7/fetch.h | 33 +++++++++++------------ src/arch/arm/v7/link.c | 4 +-- src/arch/arm/v7/link.h | 5 ++-- src/arch/arm/v7/post.c | 13 +++++---- src/arch/arm/v7/post.h | 9 +++---- src/arch/dalvik/fetch.c | 2 +- src/arch/dalvik/fetch.h | 9 +++---- src/arch/dalvik/link.c | 2 +- src/arch/dalvik/link.h | 6 ++--- src/arch/dalvik/post.h | 6 ++--- src/arch/instruction.c | 2 +- src/arch/instruction.h | 18 +++++-------- src/arch/link.c | 6 ++--- src/arch/link.h | 11 ++++---- src/arch/post.c | 19 ++++++++------ src/arch/post.h | 4 +-- src/arch/processor-int.h | 4 --- src/arch/processor.c | 54 -------------------------------------- src/arch/processor.h | 4 --- src/format/elf/helper_x86.c | 2 ++ src/gtkext/gtkgraphview.c | 1 + src/gtkext/gtkstatusstack.c | 1 + src/gui/dialogs/gotox.c | 1 + src/gui/panels/strings.c | 1 + src/plugins/plugin.h | 1 + 39 files changed, 171 insertions(+), 181 deletions(-) diff --git a/ChangeLog b/ChangeLog index a89b57f..34b5d87 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,46 @@ +16-12-12 Cyrille Bagard + + * plugins/libcsem/exit.c: + * plugins/ropgadgets/finder.c: + * plugins/ropgadgets/finder.h: + * plugins/ropgadgets/select.c: + * src/analysis/disass/area.c: + * src/analysis/disass/area.h: + * src/analysis/disass/disassembler.c: + * src/analysis/disass/fetch.c: + * src/analysis/disass/instructions.c: + * src/analysis/disass/instructions.h: + * src/arch/arm/link.c: + * src/arch/arm/link.h: + * src/arch/arm/v7/fetch.c: + * src/arch/arm/v7/fetch.h: + * src/arch/arm/v7/link.c: + * src/arch/arm/v7/link.h: + * src/arch/arm/v7/post.c: + * src/arch/arm/v7/post.h: + * src/arch/dalvik/fetch.c: + * src/arch/dalvik/fetch.h: + * src/arch/dalvik/link.c: + * src/arch/dalvik/link.h: + * src/arch/dalvik/post.h: + * src/arch/instruction.c: + * src/arch/instruction.h: + * src/arch/link.c: + * src/arch/link.h: + * src/arch/post.c: + * src/arch/post.h: + * src/arch/processor-int.h: + * src/arch/processor.c: + * src/arch/processor.h: + * src/format/elf/helper_x86.c: + * src/gtkext/gtkgraphview.c: + * src/gtkext/gtkstatusstack.c: + * src/gui/dialogs/gotox.c: + * src/gui/panels/strings.c: + * src/plugins/plugin.h: + Apply some code refactoring to remove usages of GBinFormat in favor of + GExeFormat. + 16-12-05 Cyrille Bagard * src/arch/vmpa.c: diff --git a/plugins/libcsem/exit.c b/plugins/libcsem/exit.c index b5545b9..cbfec64 100644 --- a/plugins/libcsem/exit.c +++ b/plugins/libcsem/exit.c @@ -24,6 +24,9 @@ #include "exit.h" +#include + + /* Modifie toutes les instructions appelant exit(). */ static void mark_one_kind_of_exit_as_return(const GLoadedBinary *, const char *); diff --git a/plugins/ropgadgets/finder.c b/plugins/ropgadgets/finder.c index 4d48296..6a2283c 100644 --- a/plugins/ropgadgets/finder.c +++ b/plugins/ropgadgets/finder.c @@ -28,6 +28,7 @@ #include +#include #include @@ -40,7 +41,7 @@ /* Données utiles à transmettre */ typedef struct _search_domain { - GBinFormat *format; /* Format du fichier binaire */ + GExeFormat *format; /* Format du fichier binaire */ GBinContent *content; /* Contenu associé récupéré */ GArchProcessor *proc; /* Processeur idéal en place */ GProcContext *ctx; /* Contexte de désassemblage */ @@ -86,7 +87,7 @@ static GArchInstruction *disassemble_instruction_in_domain(const search_domain * ctx = domain->ctx; /* TODO : copie */ - result = g_arch_processor_disassemble(domain->proc, ctx, domain->content, pos, G_EXE_FORMAT(domain->format)); + result = g_arch_processor_disassemble(domain->proc, ctx, domain->content, pos, domain->format); if (result != NULL) { @@ -317,7 +318,7 @@ static GArchInstruction **list_all_gadgets_in_domain(const search_domain *domain * * ******************************************************************************/ -found_rop_list *list_all_gadgets(GBinFormat *format, unsigned int max_depth, update_search_progress_cb update, GObject *data, size_t *count) +found_rop_list *list_all_gadgets(GExeFormat *format, unsigned int max_depth, update_search_progress_cb update, GObject *data, size_t *count) { found_rop_list *result; /* Liste de listes à renvoyer */ const char *target; /* Sous-traitance requise */ @@ -331,12 +332,12 @@ found_rop_list *list_all_gadgets(GBinFormat *format, unsigned int max_depth, upd g_object_ref(G_OBJECT(format)); domain.format = format; - domain.content = g_binary_format_get_content(format); + domain.content = g_binary_format_get_content(G_BIN_FORMAT(format)); - target = g_exe_format_get_target_machine(G_EXE_FORMAT(format)); + target = g_exe_format_get_target_machine(format); domain.proc = get_arch_processor_for_type(target); - domain.exe_ranges = g_exe_format_get_x_ranges(G_EXE_FORMAT(format), &domain.exe_count); + domain.exe_ranges = g_exe_format_get_x_ranges(format, &domain.exe_count); /* Récupération des différents contextes */ diff --git a/plugins/ropgadgets/finder.h b/plugins/ropgadgets/finder.h index 2c7d692..6539784 100644 --- a/plugins/ropgadgets/finder.h +++ b/plugins/ropgadgets/finder.h @@ -26,7 +26,7 @@ #include -#include +#include @@ -46,7 +46,7 @@ typedef struct _found_rop_list /* Etablit une liste de tous les gadgets présents. */ -found_rop_list *list_all_gadgets(GBinFormat *, unsigned int, update_search_progress_cb, GObject *, size_t *); +found_rop_list *list_all_gadgets(GExeFormat *, unsigned int, update_search_progress_cb, GObject *, size_t *); diff --git a/plugins/ropgadgets/select.c b/plugins/ropgadgets/select.c index 8878839..881cd39 100644 --- a/plugins/ropgadgets/select.c +++ b/plugins/ropgadgets/select.c @@ -138,7 +138,7 @@ typedef struct _search_step struct { - GBinFormat *format; /* Format binaire chargé */ + GExeFormat *format; /* Format binaire chargé */ found_rop_list *list; /* Liste de gadgets ROP trouvés*/ size_t count; /* Nombre de gadgets trouvés */ }; @@ -167,13 +167,13 @@ static void push_new_progress_fraction(GObject *, gdouble); static gboolean register_found_rop_gadgets(search_step *); /* Lance une conservation des gadgets trouvés. */ -static void push_found_rop_gadgets(GObject *, GBinFormat *, found_rop_list *, size_t); +static void push_found_rop_gadgets(GObject *, GExeFormat *, found_rop_list *, size_t); /* Charge un format binaire interne déjà chargé. */ -static GBinFormat *load_internal_format_for_rop_gadgets(GObject *); +static GExeFormat *load_internal_format_for_rop_gadgets(GObject *); /* Charge un format binaire externe. */ -static GBinFormat *load_external_format_for_rop_gadgets(GObject *); +static GExeFormat *load_external_format_for_rop_gadgets(GObject *); /* Procède à la recherche de gadgets de façon séparée. */ static gpointer look_for_rop_gadgets(GObject *); @@ -211,7 +211,7 @@ static void on_rop_gadgets_filter_changed(GtkSearchEntry *, GObject *); static gboolean filter_visible_rop_gadgets(GtkTreeModel *, GtkTreeIter *, GObject *); /* Ajoute de nouvelles chaînes de gadgets localisées. */ -static void add_new_gadgets_for_category(GBinFormat *, GtkComboBoxText *, GtkTreeStore *, const char *, GArchInstruction **, size_t); +static void add_new_gadgets_for_category(GExeFormat *, GtkComboBoxText *, GtkTreeStore *, const char *, GArchInstruction **, size_t); @@ -1233,7 +1233,7 @@ static gboolean register_found_rop_gadgets(search_step *step) * * ******************************************************************************/ -static void push_found_rop_gadgets(GObject *ref, GBinFormat *format, found_rop_list *list, size_t count) +static void push_found_rop_gadgets(GObject *ref, GExeFormat *format, found_rop_list *list, size_t count) { search_step *step; /* Informations d'étape */ @@ -1262,9 +1262,9 @@ static void push_found_rop_gadgets(GObject *ref, GBinFormat *format, found_rop_l * * ******************************************************************************/ -static GBinFormat *load_internal_format_for_rop_gadgets(GObject *ref) +static GExeFormat *load_internal_format_for_rop_gadgets(GObject *ref) { - GBinFormat *result; /* Format chargé à retourner */ + GExeFormat *result; /* Format chargé à retourner */ GtkComboBox *combo; /* Composant de sélection */ GtkTreeIter iter; /* Tête de lecture à placer */ GtkTreeModel *model; /* Modèle de gestion */ @@ -1283,7 +1283,7 @@ static GBinFormat *load_internal_format_for_rop_gadgets(GObject *ref) push_status_printing_of_rop_search_step(ref, "loading", _("done"), true); - result = G_BIN_FORMAT(g_loaded_binary_get_format(binary)); + result = g_loaded_binary_get_format(binary); push_status_printing_of_rop_search_step(ref, "format", _("already loaded"), true); @@ -1306,9 +1306,9 @@ static GBinFormat *load_internal_format_for_rop_gadgets(GObject *ref) * * ******************************************************************************/ -static GBinFormat *load_external_format_for_rop_gadgets(GObject *ref) +static GExeFormat *load_external_format_for_rop_gadgets(GObject *ref) { - GBinFormat *result; /* Format chargé à retourner */ + GExeFormat *result; /* Format chargé à retourner */ GtkEntry *entry; /* Zone de saisie de texte */ const gchar *filename; /* Nom du fichier à charger */ GBinContent *content; /* Contenu binaire chargé */ @@ -1346,7 +1346,7 @@ static GBinFormat *load_external_format_for_rop_gadgets(GObject *ref) desc = get_binary_format_name(target); - result = load_new_named_format(target, content, NULL); + result = G_EXE_FORMAT(load_new_named_format(target, content, NULL)); free(target); @@ -1383,7 +1383,7 @@ static gpointer look_for_rop_gadgets(GObject *ref) { GtkToggleButton *internal; /* Bouton de sélection interne */ gboolean state; /* Etat du bouton courant */ - GBinFormat *format; /* Format du binaire à traiter */ + GExeFormat *format; /* Format du binaire à traiter */ found_rop_list *list; /* Liste de gadgets ROP trouvés*/ size_t count; /* Nombre de ces listes */ size_t found; /* Nombre de gadgets trouvés */ @@ -1744,7 +1744,7 @@ static gboolean filter_visible_rop_gadgets(GtkTreeModel *model, GtkTreeIter *ite * * ******************************************************************************/ -static void add_new_gadgets_for_category(GBinFormat *format, GtkComboBoxText *combo, GtkTreeStore *store, const char *category, GArchInstruction **gadgets, size_t count) +static void add_new_gadgets_for_category(GExeFormat *format, GtkComboBoxText *combo, GtkTreeStore *store, const char *category, GArchInstruction **gadgets, size_t count) { const char *target; /* Sous-traitance requise */ GArchProcessor *proc; /* Architecture du binaire */ @@ -1764,7 +1764,7 @@ static void add_new_gadgets_for_category(GBinFormat *format, GtkComboBoxText *co /* Définition de l'écosystème nécessaire */ - target = g_exe_format_get_target_machine(G_EXE_FORMAT(format)); + target = g_exe_format_get_target_machine(format); proc = get_arch_processor_for_type(target); msize = g_arch_processor_get_memory_size(proc); diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c index 52ba933..48ac6ec 100644 --- a/src/analysis/disass/area.c +++ b/src/analysis/disass/area.c @@ -33,6 +33,7 @@ #include "../../analysis/contents/restricted.h" #include "../../arch/raw.h" #include "../../common/bits.h" +#include "../../format/format.h" #include "../../gui/panels/log.h" @@ -336,7 +337,7 @@ static void update_address_as_routine(GBinFormat *format, const vmpa2t *addr) { symbol = g_binary_symbol_new(STP_ROUTINE); g_binary_symbol_attach_routine(symbol, routine); - g_binary_format_add_symbol(G_BIN_FORMAT(format), symbol); + g_binary_format_add_symbol(format, symbol); } else _g_binary_symbol_attach_routine(symbol, routine, STP_ROUTINE); @@ -479,7 +480,7 @@ void load_code_from_mem_area(mem_area *area, mem_area *list, size_t count, GProc /* Eventuel renvoi vers d'autres adresses */ - g_arch_instruction_call_hook(instr, IPH_FETCH, proc, ctx, format); + g_arch_instruction_call_hook(instr, IPH_FETCH, proc, ctx, G_EXE_FORMAT(format)); /* Insertion des symboles découverts en parallèle */ diff --git a/src/analysis/disass/area.h b/src/analysis/disass/area.h index f9cd9e6..39313fd 100644 --- a/src/analysis/disass/area.h +++ b/src/analysis/disass/area.h @@ -27,6 +27,7 @@ #include "../binary.h" #include "../../arch/instruction.h" +#include "../../format/symbol.h" #include "../../gtkext/gtkstatusstack.h" diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c index 8a19f9d..62821ab 100644 --- a/src/analysis/disass/disassembler.c +++ b/src/analysis/disass/disassembler.c @@ -280,7 +280,7 @@ static void process_all_instructions(wgroup_id_t gid, GtkStatusStack *status, co else end = begin + run_size; - study = g_instructions_study_new(proc, ctx, G_BIN_FORMAT(format), begin, end, id, fallback); + study = g_instructions_study_new(proc, ctx, format, begin, end, id, fallback); g_work_queue_schedule_work(queue, G_DELAYED_WORK(study), gid); diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c index 55a23b6..0005378 100644 --- a/src/analysis/disass/fetch.c +++ b/src/analysis/disass/fetch.c @@ -31,6 +31,7 @@ #include "area.h" +#include "../../format/format.h" #include "../../glibext/delayed-int.h" diff --git a/src/analysis/disass/instructions.c b/src/analysis/disass/instructions.c index a3ca662..799d196 100644 --- a/src/analysis/disass/instructions.c +++ b/src/analysis/disass/instructions.c @@ -40,7 +40,7 @@ struct _GInstructionsStudy GArchProcessor *proc; /* Processeurs avec ses instr. */ GProcContext *ctx; /* Suivi du désassemblage */ - GBinFormat *format; /* Format binaire à manipuler */ + GExeFormat *format; /* Format binaire à manipuler */ ins_fallback_cb fallback; /* Routine de traitement finale*/ size_t begin; /* Point de départ du parcours */ @@ -185,7 +185,7 @@ static void g_instructions_study_finalize(GInstructionsStudy *study) * * ******************************************************************************/ -GInstructionsStudy *g_instructions_study_new(GArchProcessor *proc, GProcContext *ctx, GBinFormat *format, size_t begin, size_t end, activity_id_t id, ins_fallback_cb fallback) +GInstructionsStudy *g_instructions_study_new(GArchProcessor *proc, GProcContext *ctx, GExeFormat *format, size_t begin, size_t end, activity_id_t id, ins_fallback_cb fallback) { GInstructionsStudy *result; /* Tâche à retourner */ @@ -310,6 +310,6 @@ void g_instructions_study_establish_links(GInstructionsStudy *study, size_t inde } - establish_links_for_instruction(instr, study->format, study->proc); + establish_links_for_instruction(instr, G_BIN_FORMAT(study->format), study->proc); } diff --git a/src/analysis/disass/instructions.h b/src/analysis/disass/instructions.h index a69e4df..9d76035 100644 --- a/src/analysis/disass/instructions.h +++ b/src/analysis/disass/instructions.h @@ -52,7 +52,7 @@ typedef void (* ins_fallback_cb) (GInstructionsStudy *, size_t); /* Crée une tâche d'étude de instructions différée. */ -GInstructionsStudy *g_instructions_study_new(GArchProcessor *, GProcContext *, GBinFormat *, size_t, size_t, activity_id_t, ins_fallback_cb); +GInstructionsStudy *g_instructions_study_new(GArchProcessor *, GProcContext *, GExeFormat *, size_t, size_t, activity_id_t, ins_fallback_cb); /* Réalise l'appel de type IPH_LINK sur une instruction. */ void g_instructions_study_do_link_operation(GInstructionsStudy *, size_t); diff --git a/src/arch/arm/link.c b/src/arch/arm/link.c index d50ff5f..9b78fa0 100644 --- a/src/arch/arm/link.c +++ b/src/arch/arm/link.c @@ -45,7 +45,7 @@ * * ******************************************************************************/ -void handle_arm_conditional_branch_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +void handle_arm_conditional_branch_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) { switch (g_arm_instruction_get_cond(G_ARM_INSTRUCTION(instr))) { diff --git a/src/arch/arm/link.h b/src/arch/arm/link.h index 732f203..d461559 100644 --- a/src/arch/arm/link.h +++ b/src/arch/arm/link.h @@ -27,12 +27,11 @@ #include "../instruction.h" #include "../processor.h" -#include "../../format/format.h" /* Etablit un lien conditionnel selon une instruction donnée. */ -void handle_arm_conditional_branch_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void handle_arm_conditional_branch_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); diff --git a/src/arch/arm/v7/fetch.c b/src/arch/arm/v7/fetch.c index 8c36f9b..7296717 100644 --- a/src/arch/arm/v7/fetch.c +++ b/src/arch/arm/v7/fetch.c @@ -34,6 +34,7 @@ #include "operands/offset.h" #include "../register.h" #include "../../raw.h" +#include "../../../format/format.h" @@ -53,7 +54,7 @@ * * ******************************************************************************/ -void help_fetching_with_instruction_b_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) +void help_fetching_with_instruction_b_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GExeFormat *format, ArmV7InstrSet iset) { const mrange_t *range; /* Emplacementt d'instruction */ virt_t pc; /* Position dans l'exécution */ @@ -120,7 +121,7 @@ void help_fetching_with_instruction_b_with_orig(GArchInstruction *instr, GArchPr * * ******************************************************************************/ -void help_fetching_with_instruction_bl_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) +void help_fetching_with_instruction_bl_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GExeFormat *format, ArmV7InstrSet iset) { const mrange_t *range; /* Emplacementt d'instruction */ virt_t pc; /* Position dans l'exécution */ @@ -189,7 +190,7 @@ void help_fetching_with_instruction_bl_with_orig(GArchInstruction *instr, GArchP * * ******************************************************************************/ -void help_fetching_with_instruction_blx_with_dest(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) +void help_fetching_with_instruction_blx_with_dest(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GExeFormat *format, ArmV7InstrSet iset) { const mrange_t *range; /* Emplacementt d'instruction */ virt_t pc; /* Position dans l'exécution */ @@ -248,7 +249,7 @@ void help_fetching_with_instruction_blx_with_dest(GArchInstruction *instr, GArch * * ******************************************************************************/ -void help_fetching_with_instruction_bx_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) +void help_fetching_with_instruction_bx_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GExeFormat *format, ArmV7InstrSet iset) { GArchOperand *op; /* Opérande numérique en place */ GArmRegister *reg; /* Registre matériel manipulé */ @@ -310,7 +311,7 @@ void help_fetching_with_instruction_bx_with_orig(GArchInstruction *instr, GArchP * * ******************************************************************************/ -void help_fetching_with_instruction_cb_n_z(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GBinFormat *format) +void help_fetching_with_instruction_cb_n_z(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GExeFormat *format) { const mrange_t *range; /* Emplacementt d'instruction */ virt_t pc; /* Position dans l'exécution */ @@ -363,7 +364,7 @@ void help_fetching_with_instruction_cb_n_z(GArchInstruction *instr, GArchProcess * * ******************************************************************************/ -void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GBinFormat *format, ArmV7InstrSet iset) +void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *instr, GArchProcessor *proc, GArmV7Context *context, GExeFormat *format, ArmV7InstrSet iset) { const mrange_t *range; /* Emplacementt d'instruction */ phys_t phys_pc; /* Position dans l'exécution */ @@ -423,7 +424,7 @@ void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *inst val_offset = phys_pc + offset; - if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), val_offset, &sym_addr)) + if (!g_exe_format_translate_offset_into_vmpa(format, val_offset, &sym_addr)) { assert(0); return; @@ -441,7 +442,7 @@ void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *inst /* Lecture de la valeur vers laquelle renvoyer */ - content = g_binary_format_get_content(format); + content = g_binary_format_get_content(G_BIN_FORMAT(format)); copy_vmpa(&pos, &sym_addr); @@ -461,7 +462,7 @@ void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *inst vmpa2_virt_to_string(get_mrange_addr(range), MDS_32_BITS, loc, NULL); snprintf(name, name_len, _("Value used @ %s"), loc); - ADD_RAW_AS_SYM(format, symbol, &sym_addr, sym_instr, comment, name); + ADD_RAW_AS_SYM(G_BIN_FORMAT(format), symbol, &sym_addr, sym_instr, comment, name); free(name); diff --git a/src/arch/arm/v7/fetch.h b/src/arch/arm/v7/fetch.h index e8e57e5..e8a89d6 100644 --- a/src/arch/arm/v7/fetch.h +++ b/src/arch/arm/v7/fetch.h @@ -27,83 +27,82 @@ #include "context.h" #include "../../instruction.h" -#include "../../../format/format.h" /* Complète un désassemblage accompli pour une instruction. */ -void help_fetching_with_instruction_b_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GBinFormat *, ArmV7InstrSet); +void help_fetching_with_instruction_b_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GExeFormat *, ArmV7InstrSet); -static inline void help_fetching_with_instruction_b_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_b_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_b_with_orig(ins, proc, ctx, fmt, AV7IS_ARM); } -static inline void help_fetching_with_instruction_b_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_b_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_b_with_orig(ins, proc, ctx, fmt, AV7IS_THUMB); } /* Complète un désassemblage accompli pour une instruction. */ -void help_fetching_with_instruction_bl_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GBinFormat *, ArmV7InstrSet); +void help_fetching_with_instruction_bl_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GExeFormat *, ArmV7InstrSet); -static inline void help_fetching_with_instruction_bl_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_bl_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_bl_with_orig(ins, proc, ctx, fmt, AV7IS_ARM); } -static inline void help_fetching_with_instruction_bl_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_bl_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_bl_with_orig(ins, proc, ctx, fmt, AV7IS_THUMB); } /* Complète un désassemblage accompli pour une instruction. */ -void help_fetching_with_instruction_blx_with_dest(GArchInstruction *, GArchProcessor *, GArmV7Context *, GBinFormat *, ArmV7InstrSet); +void help_fetching_with_instruction_blx_with_dest(GArchInstruction *, GArchProcessor *, GArmV7Context *, GExeFormat *, ArmV7InstrSet); -static inline void help_fetching_with_instruction_blx_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_blx_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_blx_with_dest(ins, proc, ctx, fmt, AV7IS_THUMB); } -static inline void help_fetching_with_instruction_blx_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_blx_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_blx_with_dest(ins, proc, ctx, fmt, AV7IS_ARM); } /* Complète un désassemblage accompli pour une instruction. */ -void help_fetching_with_instruction_bx_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GBinFormat *, ArmV7InstrSet); +void help_fetching_with_instruction_bx_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GExeFormat *, ArmV7InstrSet); -static inline void help_fetching_with_instruction_bx_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_bx_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_bx_with_orig(ins, proc, ctx, fmt, AV7IS_ARM); } -static inline void help_fetching_with_instruction_bx_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_bx_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_bx_with_orig(ins, proc, ctx, fmt, AV7IS_THUMB); } /* Complète un désassemblage accompli pour une instruction. */ -void help_fetching_with_instruction_cb_n_z(GArchInstruction *, GArchProcessor *, GArmV7Context *, GBinFormat *); +void help_fetching_with_instruction_cb_n_z(GArchInstruction *, GArchProcessor *, GArmV7Context *, GExeFormat *); /* Complète un désassemblage accompli pour une instruction. */ -void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GBinFormat *, ArmV7InstrSet); +void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *, GArchProcessor *, GArmV7Context *, GExeFormat *, ArmV7InstrSet); -static inline void help_fetching_with_instruction_ldr_literal_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_ldr_literal_from_arm(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_ldr_literal_with_orig(ins, proc, ctx, fmt, AV7IS_ARM); } -static inline void help_fetching_with_instruction_ldr_literal_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GBinFormat *fmt) +static inline void help_fetching_with_instruction_ldr_literal_from_thumb(GArchInstruction *ins, GArchProcessor *proc, GArmV7Context *ctx, GExeFormat *fmt) { help_fetching_with_instruction_ldr_literal_with_orig(ins, proc, ctx, fmt, AV7IS_THUMB); } diff --git a/src/arch/arm/v7/link.c b/src/arch/arm/v7/link.c index e9fc4bc..90d78bc 100644 --- a/src/arch/arm/v7/link.c +++ b/src/arch/arm/v7/link.c @@ -47,7 +47,7 @@ * * ******************************************************************************/ -void handle_armv7_conditional_branch_from_register(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +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é */ @@ -81,7 +81,7 @@ void handle_armv7_conditional_branch_from_register(GArchInstruction *instr, GArc * * ******************************************************************************/ -void handle_armv7_return_from_pop(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +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 */ diff --git a/src/arch/arm/v7/link.h b/src/arch/arm/v7/link.h index 0b658fc..136b787 100644 --- a/src/arch/arm/v7/link.h +++ b/src/arch/arm/v7/link.h @@ -27,15 +27,14 @@ #include "context.h" #include "../../instruction.h" -#include "../../../format/format.h" /* Encadre les sauts à partir de registres ARMv7. */ -void handle_armv7_conditional_branch_from_register(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void handle_armv7_conditional_branch_from_register(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); /* Détecte les fins de procédures à base d'instructions 'pop'. */ -void handle_armv7_return_from_pop(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void handle_armv7_return_from_pop(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); diff --git a/src/arch/arm/v7/post.c b/src/arch/arm/v7/post.c index b6c0f14..9abe232 100644 --- a/src/arch/arm/v7/post.c +++ b/src/arch/arm/v7/post.c @@ -43,10 +43,11 @@ * * ******************************************************************************/ -void post_process_ldr_instructions(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +void post_process_ldr_instructions(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) { GArchOperand *op; /* Opérande numérique en place */ uint32_t addr; /* Adresse visée par le saut */ + GBinFormat *bfmt; /* Version basique du format */ GArchOperand *new; /* Instruction de ciblage */ vmpa2t target; mrange_t trange; /* Etendue du symbole à créer */ @@ -62,11 +63,13 @@ void post_process_ldr_instructions(GArchInstruction *instr, GArchProcessor *proc if (g_imm_operand_get_value(G_IMM_OPERAND(op), MDS_32_BITS_UNSIGNED, &addr) - && g_exe_format_translate_address_into_vmpa(G_EXE_FORMAT(format), addr, &target)) + && g_exe_format_translate_address_into_vmpa(format, addr, &target)) { + bfmt = G_BIN_FORMAT(format); + new = g_target_operand_new(MDS_32_BITS_UNSIGNED, addr); - if (!g_target_operand_resolve(G_TARGET_OPERAND(new), format, true)) + if (!g_target_operand_resolve(G_TARGET_OPERAND(new), bfmt, true)) { addr &= ~0x1; @@ -96,11 +99,11 @@ void post_process_ldr_instructions(GArchInstruction *instr, GArchProcessor *proc symbol = g_binary_symbol_new(STP_CODE_LABEL); g_binary_symbol_attach_routine(symbol, routine); - g_binary_format_add_symbol(G_BIN_FORMAT(format), symbol); + g_binary_format_add_symbol(bfmt, symbol); - g_target_operand_resolve(G_TARGET_OPERAND(new), format, true); + g_target_operand_resolve(G_TARGET_OPERAND(new), bfmt, true); } else diff --git a/src/arch/arm/v7/post.h b/src/arch/arm/v7/post.h index 5237045..a8acb3c 100644 --- a/src/arch/arm/v7/post.h +++ b/src/arch/arm/v7/post.h @@ -27,23 +27,22 @@ #include "../../instruction.h" #include "../../post.h" -#include "../../../format/format.h" -static inline void post_process_branch_instructions(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void post_process_branch_instructions(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { post_process_target_resolution(ins, proc, ctx, fmt, 0, STP_CODE_LABEL); } -static inline void post_process_branch_and_link_instructions(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void post_process_branch_and_link_instructions(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { post_process_target_resolution(ins, proc, ctx, fmt, 0, STP_ROUTINE); } -static inline void post_process_comp_and_branch_instructions(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void post_process_comp_and_branch_instructions(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { post_process_target_resolution(ins, proc, ctx, fmt, 1, STP_CODE_LABEL); @@ -51,7 +50,7 @@ static inline void post_process_comp_and_branch_instructions(GArchInstruction *i /* Complète un désassemblage accompli pour une instruction. */ -void post_process_ldr_instructions(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void post_process_ldr_instructions(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); diff --git a/src/arch/dalvik/fetch.c b/src/arch/dalvik/fetch.c index 89d5bea..e05b7de 100644 --- a/src/arch/dalvik/fetch.c +++ b/src/arch/dalvik/fetch.c @@ -44,7 +44,7 @@ * * ******************************************************************************/ -void help_fetching_with_dalvik_instruction(GArchInstruction *instr, GArchProcessor *proc, GDalvikContext *context, GBinFormat *format, size_t index) +void help_fetching_with_dalvik_instruction(GArchInstruction *instr, GArchProcessor *proc, GDalvikContext *context, GExeFormat *format, size_t index) { GArchOperand *op; /* Opérande numérique en place */ virt_t target; /* Adresse virtuelle visée */ diff --git a/src/arch/dalvik/fetch.h b/src/arch/dalvik/fetch.h index 3a8dda3..1c10bbf 100644 --- a/src/arch/dalvik/fetch.h +++ b/src/arch/dalvik/fetch.h @@ -27,25 +27,24 @@ #include "context.h" #include "../instruction.h" -#include "../../format/format.h" /* Pousse une adresse précisée par un saut pour désassemblage. */ -void help_fetching_with_dalvik_instruction(GArchInstruction *, GArchProcessor *, GDalvikContext *, GBinFormat *, size_t); +void help_fetching_with_dalvik_instruction(GArchInstruction *, GArchProcessor *, GDalvikContext *, GExeFormat *, size_t); -static inline void help_fetching_with_dalvik_goto_instruction(GArchInstruction *ins, GArchProcessor *proc, GDalvikContext *ctx, GBinFormat *fmt) +static inline void help_fetching_with_dalvik_goto_instruction(GArchInstruction *ins, GArchProcessor *proc, GDalvikContext *ctx, GExeFormat *fmt) { help_fetching_with_dalvik_instruction(ins, proc, ctx, fmt, 0); } -static inline void help_fetching_with_dalvik_if_instruction(GArchInstruction *ins, GArchProcessor *proc, GDalvikContext *ctx, GBinFormat *fmt) +static inline void help_fetching_with_dalvik_if_instruction(GArchInstruction *ins, GArchProcessor *proc, GDalvikContext *ctx, GExeFormat *fmt) { help_fetching_with_dalvik_instruction(ins, proc, ctx, fmt, 2); } -static inline void help_fetching_with_dalvik_ifz_instruction(GArchInstruction *ins, GArchProcessor *proc, GDalvikContext *ctx, GBinFormat *fmt) +static inline void help_fetching_with_dalvik_ifz_instruction(GArchInstruction *ins, GArchProcessor *proc, GDalvikContext *ctx, GExeFormat *fmt) { help_fetching_with_dalvik_instruction(ins, proc, ctx, fmt, 1); } diff --git a/src/arch/dalvik/link.c b/src/arch/dalvik/link.c index 2d1b18c..311f672 100644 --- a/src/arch/dalvik/link.c +++ b/src/arch/dalvik/link.c @@ -74,7 +74,7 @@ typedef struct _case_comment * * ******************************************************************************/ -void handle_dalvik_packed_switch_links(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +void handle_dalvik_packed_switch_links(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) { GArchOperand *op; /* Opérande numérique en place */ virt_t virt; /* Adresse virtuelle */ diff --git a/src/arch/dalvik/link.h b/src/arch/dalvik/link.h index a965b3b..ee5d5db 100644 --- a/src/arch/dalvik/link.h +++ b/src/arch/dalvik/link.h @@ -29,19 +29,19 @@ -static inline void handle_dalvik_if_branch_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void handle_dalvik_if_branch_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { handle_branch_as_link(ins, proc, ctx, fmt, 2); } -static inline void handle_dalvik_ifz_branch_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void handle_dalvik_ifz_branch_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { handle_branch_as_link(ins, proc, ctx, fmt, 1); } /* Etablit tous les liens liés à un embranchement compressé. */ -void handle_dalvik_packed_switch_links(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void handle_dalvik_packed_switch_links(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); diff --git a/src/arch/dalvik/post.h b/src/arch/dalvik/post.h index a86ed4c..a5375b7 100644 --- a/src/arch/dalvik/post.h +++ b/src/arch/dalvik/post.h @@ -29,19 +29,19 @@ -static inline void post_process_dalvik_goto_target_resolution(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void post_process_dalvik_goto_target_resolution(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { post_process_target_resolution(ins, proc, ctx, fmt, 0, STP_CODE_LABEL); } -static inline void post_process_dalvik_if_target_resolution(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void post_process_dalvik_if_target_resolution(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { post_process_target_resolution(ins, proc, ctx, fmt, 2, STP_CODE_LABEL); } -static inline void post_process_dalvik_ifz_target_resolution(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void post_process_dalvik_ifz_target_resolution(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { post_process_target_resolution(ins, proc, ctx, fmt, 1, STP_CODE_LABEL); diff --git a/src/arch/instruction.c b/src/arch/instruction.c index 89b498e..e3490a8 100644 --- a/src/arch/instruction.c +++ b/src/arch/instruction.c @@ -251,7 +251,7 @@ void g_arch_instruction_set_hooks(GArchInstruction *instr, const instr_hook_fc h * * ******************************************************************************/ -void g_arch_instruction_call_hook(GArchInstruction *instr, InstrProcessHook type, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +void g_arch_instruction_call_hook(GArchInstruction *instr, InstrProcessHook type, GArchProcessor *proc, GProcContext *context, GExeFormat *format) { assert(type < IPH_COUNT); diff --git a/src/arch/instruction.h b/src/arch/instruction.h index 657e25f..d87eb1c 100644 --- a/src/arch/instruction.h +++ b/src/arch/instruction.h @@ -36,7 +36,7 @@ #include "../analysis/type.h" #include "../decomp/context.h" #include "../decomp/instruction.h" -//#include "../format/executable.h" +#include "../format/executable.h" //#include "../format/format.h" @@ -79,19 +79,13 @@ ArchInstrFlag g_arch_instruction_get_flags(const GArchInstruction *); /** - * La définition de "GBinFormat", utile aux traitements complémentaires, ne peut - * se faire en incluant le fichier d'en-tête "../format/format.h", pour cause - * de références circulaires. + * La définition de "GArchProcessor", utile aux traitements complémentaires, ne peut + * se faire en incluant le fichier d'en-tête "processor.h", pour cause de références + * circulaires. * * On procède donc à une seconde déclaration, en attendant éventuellement mieux. - * - * Pareil pour "GArchProcessor", définie dans le fichier "processor.h", lequel - * inclut directement ce fichier. */ -/* Format binaire générique (instance) */ -typedef struct _GBinFormat GBinFormat; - /* Ligne de représentation générique (instance) */ typedef struct _GArchProcessor GArchProcessor; @@ -108,13 +102,13 @@ typedef enum _InstrProcessHook } InstrProcessHook; /* Complète un désassemblage accompli pour une instruction. */ -typedef void (* instr_hook_fc) (GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +typedef void (* instr_hook_fc) (GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); /* Définit un traitement complémentare au désassemblage. */ void g_arch_instruction_set_hooks(GArchInstruction *, const instr_hook_fc [IPH_COUNT]); /* Complète un désassemblage accompli pour une instruction. */ -void g_arch_instruction_call_hook(GArchInstruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GBinFormat *); +void g_arch_instruction_call_hook(GArchInstruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *); /* Définit la localisation d'une instruction. */ void g_arch_instruction_set_range(GArchInstruction *, const mrange_t *); diff --git a/src/arch/link.c b/src/arch/link.c index b6d69e0..4519bc5 100644 --- a/src/arch/link.c +++ b/src/arch/link.c @@ -46,7 +46,7 @@ * * ******************************************************************************/ -void handle_jump_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +void handle_jump_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) { GArchOperand *op; /* Opérande numérique en place */ virt_t virt; /* Adresse virtuelle */ @@ -89,7 +89,7 @@ void handle_jump_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcCon * * ******************************************************************************/ -void handle_branch_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format, size_t index) +void handle_branch_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format, size_t index) { GArchOperand *op; /* Opérande numérique en place */ virt_t virt; /* Adresse virtuelle */ @@ -154,7 +154,7 @@ void handle_branch_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcC * * ******************************************************************************/ -void handle_call_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format) +void handle_call_as_link(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format) { GArchOperand *op; /* Opérande numérique en place */ virt_t virt; /* Adresse virtuelle */ diff --git a/src/arch/link.h b/src/arch/link.h index 1000365..07a3d88 100644 --- a/src/arch/link.h +++ b/src/arch/link.h @@ -27,30 +27,29 @@ #include "instruction.h" #include "processor.h" -#include "../format/format.h" /* Etablit un lien de saut selon une instruction donnée. */ -void handle_jump_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void handle_jump_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); /* Etablit un lien d'appel selon une instruction donnée. */ -void handle_branch_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *, size_t); +void handle_branch_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *, size_t); -static inline void handle_branch_if_true_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void handle_branch_if_true_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { handle_branch_as_link(ins, proc, ctx, fmt, 0); } -static inline void handle_comp_and_branch_if_true_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GBinFormat *fmt) +static inline void handle_comp_and_branch_if_true_as_link(GArchInstruction *ins, GArchProcessor *proc, GProcContext *ctx, GExeFormat *fmt) { handle_branch_as_link(ins, proc, ctx, fmt, 1); } /* Etablit un lien d'appel selon une instruction donnée. */ -void handle_call_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *); +void handle_call_as_link(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *); diff --git a/src/arch/post.c b/src/arch/post.c index 4cc6d12..ebbf40b 100644 --- a/src/arch/post.c +++ b/src/arch/post.c @@ -49,16 +49,17 @@ * * ******************************************************************************/ -void post_process_target_resolution(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GBinFormat *format, size_t index, SymbolType type) +void post_process_target_resolution(GArchInstruction *instr, GArchProcessor *proc, GProcContext *context, GExeFormat *format, size_t index, SymbolType type) { GArchOperand *op; /* Opérande numérique en place */ virt_t addr; /* Adresse visée par le saut */ + GBinFormat *bfmt; /* Version basique du format */ MemoryDataSize ptr_size; /* Taille de l'espace mémoire */ GArchOperand *new; /* Instruction de ciblage */ - vmpa2t target; + vmpa2t target; /* Emplacement de la cible */ mrange_t trange; /* Etendue du symbole à créer */ - VMPA_BUFFER(loc); - char name[5 + VMPA_MAX_LEN]; + VMPA_BUFFER(loc); /* Conversion en chaîne */ + char name[5 + VMPA_MAX_LEN]; /* Etiquette de la destination */ GBinRoutine *routine; /* Nouvelle routine trouvée */ GBinSymbol *symbol; /* Nouveau symbole construit */ @@ -66,13 +67,15 @@ void post_process_target_resolution(GArchInstruction *instr, GArchProcessor *pro assert(G_IS_IMM_OPERAND(op)); if (g_imm_operand_to_virt_t(G_IMM_OPERAND(op), &addr) - && g_exe_format_translate_address_into_vmpa(G_EXE_FORMAT(format), addr, &target)) + && g_exe_format_translate_address_into_vmpa(format, addr, &target)) { + bfmt = G_BIN_FORMAT(format); + ptr_size = g_arch_processor_get_memory_size(proc); new = g_target_operand_new(ptr_size, addr); - if (!g_target_operand_resolve(G_TARGET_OPERAND(new), format, true)) + if (!g_target_operand_resolve(G_TARGET_OPERAND(new), bfmt, true)) { vmpa2_virt_to_string(&target, MDS_UNDEFINED, loc, NULL); @@ -100,9 +103,9 @@ void post_process_target_resolution(GArchInstruction *instr, GArchProcessor *pro symbol = g_binary_symbol_new(type); g_binary_symbol_attach_routine(symbol, routine); - g_binary_format_add_symbol(G_BIN_FORMAT(format), symbol); + g_binary_format_add_symbol(bfmt, symbol); - g_target_operand_resolve(G_TARGET_OPERAND(new), format, true); + g_target_operand_resolve(G_TARGET_OPERAND(new), bfmt, true); } diff --git a/src/arch/post.h b/src/arch/post.h index db65ebe..8174f02 100644 --- a/src/arch/post.h +++ b/src/arch/post.h @@ -26,12 +26,12 @@ #include "instruction.h" -#include "../format/format.h" +#include "../format/symbol.h" /* Associe un symbole à la valeur ciblée par un opérande. */ -void post_process_target_resolution(GArchInstruction *, GArchProcessor *, GProcContext *, GBinFormat *, size_t, SymbolType); +void post_process_target_resolution(GArchInstruction *, GArchProcessor *, GProcContext *, GExeFormat *, size_t, SymbolType); diff --git a/src/arch/processor-int.h b/src/arch/processor-int.h index 36f6db5..c92f668 100644 --- a/src/arch/processor-int.h +++ b/src/arch/processor-int.h @@ -54,9 +54,6 @@ typedef GProcContext * (* get_processor_context_fc) (const GArchProcessor *); /* Fournit un contexte lié au processeur pour une décompilation. */ typedef GDecContext * (* get_decomp_context_fc) (const GArchProcessor *); -/* Décode une instruction dans un flux de données. */ -typedef GArchInstruction * (* decode_instruction_fc) (const GArchProcessor *, GProcContext *, const bin_t *, off_t *, off_t, vmpa_t, GBinFormat *); - /* Désassemble une instruction dans un flux de données. */ typedef GArchInstruction * (* disass_instr_fc) (const GArchProcessor *, GProcContext *, const GBinContent *, vmpa2t *, GExeFormat *); @@ -108,7 +105,6 @@ struct _GArchProcessorClass { GObjectClass parent; /* A laisser en premier */ - decode_instruction_fc decode; /* Traduction en instructions */ disass_instr_fc disassemble; /* Traduction en instructions */ }; diff --git a/src/arch/processor.c b/src/arch/processor.c index 95f4b67..bfbc2db 100644 --- a/src/arch/processor.c +++ b/src/arch/processor.c @@ -232,60 +232,6 @@ MemoryDataSize g_arch_processor_get_instruction_size(const GArchProcessor *proc) /****************************************************************************** * * -* Paramètres : proc = architecture visée par la procédure. * -* ctx = contexte lié à l'exécution du processeur. * -* data = flux de données à analyser. * -* pos = position courante dans ce flux. [OUT] * -* end = limite des données à analyser. * -* addr = adresse virtuelle de l'instruction. * -* format = format du fichier contenant le code. * -* * -* Description : Décode une instruction dans un flux de données. * -* * -* Retour : Instruction mise en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GArchInstruction *g_arch_processor_decode_instruction(const GArchProcessor *proc, GProcContext *ctx, const bin_t *data, off_t *pos, off_t end, vmpa_t addr, GBinFormat *format) -{ -#if 0 - GArchInstruction *result; /* Instruction à renvoyer */ - off_t old_pos; /* Sauvegarde de la position */ - bool skipped; /* Données prise en compte ? */ - - old_pos = *pos; - - result = G_ARCH_PROCESSOR_GET_CLASS(proc)->decode(proc, ctx, data, pos, end, addr, format); - - if (result == NULL || result == SKIPPED_INSTR) - { - //printf("BAD CODE :: 0x%02hhx @0x%08lx\n", data[*pos], addr); - - skipped = (result == SKIPPED_INSTR); - - *pos = old_pos; - result = NULL;// changed !!! g_db_instruction_new_from_data(data, pos, end, addr, proc); - -#ifdef DEBUG /* FIXME */ - if (skipped) - g_db_instruction_mark_as_skipped(G_DB_INSTRUCTION(result)); -#endif - } - - //g_arch_instruction_set_location(result, old_pos, *pos - old_pos, addr); - - return result; -#endif - - return NULL; - -} - - -/****************************************************************************** -* * * Paramètres : proc = architecture visée par la procédure. * * ctx = contexte lié à l'exécution du processeur. * * content = flux de données à analyser. * diff --git a/src/arch/processor.h b/src/arch/processor.h index c41bccd..5fb3def 100644 --- a/src/arch/processor.h +++ b/src/arch/processor.h @@ -32,7 +32,6 @@ #include "instruction.h" #include "../common/endianness.h" #include "../decomp/context.h" -#include "../format/format.h" ////////////////// utile ? @@ -70,9 +69,6 @@ MemoryDataSize g_arch_processor_get_memory_size(const GArchProcessor *); /* Fournit la taille min. des instructions d'une architecture. */ MemoryDataSize g_arch_processor_get_instruction_size(const GArchProcessor *); -/* Décode une instruction dans un flux de données. */ -GArchInstruction *g_arch_processor_decode_instruction(const GArchProcessor *, GProcContext *, const bin_t *, off_t *, off_t, vmpa_t, GBinFormat *) __attribute__ ((deprecated)); - /* Désassemble une instruction dans un flux de données. */ GArchInstruction *g_arch_processor_disassemble(const GArchProcessor *, GProcContext *, const GBinContent *, vmpa2t *, GExeFormat *); diff --git a/src/format/elf/helper_x86.c b/src/format/elf/helper_x86.c index 337607d..859845c 100644 --- a/src/format/elf/helper_x86.c +++ b/src/format/elf/helper_x86.c @@ -241,8 +241,10 @@ GArchInstruction **decode_elf_relocations(GElfFormat *format, const elf_shdr *pl { address = plt_address + pos; +#if 0 instr = g_arch_processor_decode_instruction(proc, NULL /*FIXME*/, &G_BIN_FORMAT(format)->content[plt_start], &pos, plt_size, address, NULL /*FIXME*/); +#endif result = (GArchInstruction **)realloc(result, ++(*count) * sizeof(GArchInstruction *)); result[*count - 1] = instr; diff --git a/src/gtkext/gtkgraphview.c b/src/gtkext/gtkgraphview.c index 469bc46..d205e47 100644 --- a/src/gtkext/gtkgraphview.c +++ b/src/gtkext/gtkgraphview.c @@ -32,6 +32,7 @@ #include "gtkdisplaypanel-int.h" #include "graph/cluster.h" #include "../analysis/blocks/flow.h" +#include "../format/format.h" #include "../gui/editem.h" diff --git a/src/gtkext/gtkstatusstack.c b/src/gtkext/gtkstatusstack.c index ac1716e..b5dc0e1 100644 --- a/src/gtkext/gtkstatusstack.c +++ b/src/gtkext/gtkstatusstack.c @@ -35,6 +35,7 @@ #include "easygtk.h" #include "../common/extstr.h" +#include "../format/format.h" diff --git a/src/gui/dialogs/gotox.c b/src/gui/dialogs/gotox.c index 02f1a02..872cd4f 100644 --- a/src/gui/dialogs/gotox.c +++ b/src/gui/dialogs/gotox.c @@ -31,6 +31,7 @@ #include +#include "../../format/format.h" #include "../../gtkext/easygtk.h" #include "../../gtkext/support.h" diff --git a/src/gui/panels/strings.c b/src/gui/panels/strings.c index 7a927df..4f919b1 100644 --- a/src/gui/panels/strings.c +++ b/src/gui/panels/strings.c @@ -33,6 +33,7 @@ #include "../dialogs/gotox.h" #include "../../common/extstr.h" #include "../../core/params.h" +#include "../../format/format.h" #include "../../gtkext/easygtk.h" #include "../../gtkext/gtkdockable-int.h" diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h index 62cade0..fda42e4 100644 --- a/src/plugins/plugin.h +++ b/src/plugins/plugin.h @@ -31,6 +31,7 @@ #include "plugin-def.h" #include "../analysis/binary.h" +#include "../format/format.h" -- cgit v0.11.2-87-g4458