/* Chrysalide - Outil d'analyse de fichiers binaires * instruction.h - prototypes pour la gestion des instructions décompilées * * Copyright (C) 2010-2013 Cyrille Bagard * * This file is part of Chrysalide. * * OpenIDA 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. * * OpenIDA 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 _DECOMP_INSTRUCTION_H #define _DECOMP_INSTRUCTION_H #include #include "output.h" #define G_TYPE_DEC_INSTRUCTION g_dec_instruction_get_type() #define G_DEC_INSTRUCTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_dec_instruction_get_type(), GDecInstruction)) #define G_IS_DEC_INSTRUCTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_dec_instruction_get_type())) #define G_DEC_INSTRUCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_DEC_INSTRUCTION, GDecInstructionClass)) #define G_IS_DEC_INSTRUCTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_DEC_INSTRUCTION)) #define G_DEC_INSTRUCTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_DEC_INSTRUCTION, GDecInstructionClass)) /* Définition d'une instruction décompilée (instance) */ typedef struct _GDecInstruction GDecInstruction; /* Définition d'une instruction décompilée (classe) */ typedef struct _GDecInstructionClass GDecInstructionClass; /* Position au cours d'une visite */ typedef enum _DecInstrVisitFlags { DVF_ENTER = (1 << 0), /* Entrée dans une instruction */ DVF_EXIT = (1 << 1) /* Sortie d'une instruction */ } DecInstrVisitFlags; /* Rappel à chaque instruction décompilée visitée */ typedef bool (* dec_instr_visitor_cb) (GDecInstruction *, GDecInstruction *, DecInstrVisitFlags, void *); /* Indique le type défini pour une instruction décompilée. */ GType g_dec_instruction_get_type(void); /* Visite un ensemble hiérarchique d'instructions décompilées. */ bool _g_dec_instruction_visit(GDecInstruction *, GDecInstruction *, dec_instr_visitor_cb, DecInstrVisitFlags, void *); #define g_dec_instruction_visit(instr, callback, flags, data) _g_dec_instruction_visit(instr, NULL, callback, flags, data) /* Remplace une instruction décompilée par une autre. */ bool g_dec_instruction_replace(GDecInstruction *, GDecInstruction *, GDecInstruction *); /* Imprime pour l'écran un version humaine d'une expression. */ GBufferLine *g_dec_instruction_print(const GDecInstruction *, GCodeBuffer *, GBufferLine *, GLangOutput *); /* -------------------- TRAITEMENT DES INSTRUCTIONS PAR ENSEMBLE -------------------- */ /* Fournit la dernière instruction décompilée de l'ensemble. */ GDecInstruction *g_dec_instruction_get_last(GDecInstruction *); /* Ajoute une instruction à un ensemble existant. */ void g_dec_instruction_add_to_list(GDecInstruction **, GDecInstruction *); /* Supprime une instruction de l'ensemble décompilé. */ void g_dec_instruction_delete(GDecInstruction **, GDecInstruction *); /* Fournit l'élement suivant un autre pour un parcours. */ GDecInstruction *g_dec_instruction_get_next_iter(const GDecInstruction *, const GDecInstruction *); /* Fournit l'élement précédant un autre pour un parcours. */ GDecInstruction *g_dec_instruction_get_prev_iter(const GDecInstruction *, const GDecInstruction *); #endif /* _DECOMP_INSTRUCTION_H */