summaryrefslogtreecommitdiff
path: root/src/format/part.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/part.c')
-rw-r--r--src/format/part.c217
1 files changed, 217 insertions, 0 deletions
diff --git a/src/format/part.c b/src/format/part.c
new file mode 100644
index 0000000..2096c6d
--- /dev/null
+++ b/src/format/part.c
@@ -0,0 +1,217 @@
+
+/* OpenIDA - Outil d'analyse de fichiers binaires
+ * part.h - manipulation des parties de code
+ *
+ * Copyright (C) 2009 Cyrille Bagard
+ *
+ * This file is part of OpenIDA.
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "part.h"
+
+
+#include <malloc.h>
+#include <string.h>
+
+
+
+/* Bloc de données binaires quelconques (instance) */
+struct _GBinPart
+{
+ GObject parent; /* A laisser en premier */
+
+ char *name; /* Désignation humaine */
+
+ off_t offset; /* Position physique */
+ off_t size; /* Taille de la partie */
+ vmpa_t addr; /* Adresse associée */
+
+};
+
+/* Bloc de données binaires quelconques (classe) */
+struct _GBinPartClass
+{
+ GObjectClass parent; /* A laisser en premier */
+
+};
+
+
+/* Initialise la classe des blocs de données binaires. */
+static void g_binary_part_class_init(GBinPartClass *);
+
+/* Initialise une instance de bloc de données binaires. */
+static void g_binary_part_init(GBinPart *);
+
+
+
+/* Indique le type défini par la GLib pour les blocs de doonées. */
+G_DEFINE_TYPE(GBinPart, g_binary_part, G_TYPE_OBJECT);
+
+
+/******************************************************************************
+* *
+* Paramètres : klass = classe à initialiser. *
+* *
+* Description : Initialise la classe des blocs de données binaires. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_binary_part_class_init(GBinPartClass *klass)
+{
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : line = instance à initialiser. *
+* *
+* Description : Initialise une instance de bloc de données binaires. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_binary_part_init(GBinPart *line)
+{
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
+* Description : Crée une description de partie de code vierge. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GBinPart *g_binary_part_new(void)
+{
+ GBinPart *result; /* Structure à retourner */
+
+ result = g_object_new(G_TYPE_BIN_PART, NULL);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : part = description de partie à mettre à jour. *
+* name = nom à donner à la partie. *
+* *
+* Description : Attribue une description humaine à une partie de code. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_part_set_name(GBinPart *part, const char *name)
+{
+ if (part->name != NULL) free(part->name);
+
+ part->name = strdup(name);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : part = description de partie à mettre à jour. *
+* offset = position de la section à conserver. *
+* size = taille de la section à conserver. *
+* addr = adresse de la section à conserver. *
+* *
+* Description : Définit les valeurs utiles d'une partie de code. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_part_set_values(GBinPart *part, off_t offset, off_t size, vmpa_t addr)
+{
+ part->offset = offset;
+ part->size = size;
+ part->addr = addr;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : part = description de partie à consulter. *
+* offset = position de la section à donner ou NULL. [OUT] *
+* size = taille de la section à donner ou NULL. [OUT] *
+* addr = adresse de la section à donner ou NULL. [OUT] *
+* *
+* Description : Fournit les valeurs utiles d'une partie de code. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_part_get_values(const GBinPart *part, off_t *offset, off_t *size, vmpa_t *addr)
+{
+ if (offset != NULL) *offset = part->offset;
+ if (size != NULL) *size = part->size;
+ if (addr != NULL) *addr = part->addr;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : a = premières informations à consulter. *
+* b = secondes informations à consulter. *
+* *
+* Description : Etablit la comparaison entre deux blocs binaires. *
+* *
+* Retour : Bilan : -1 (a < b), 0 (a == b) ou 1 (a > b). *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+int g_binary_part_compare(const GBinPart **a, const GBinPart **b)
+{
+ int result; /* Bilan à renvoyer */
+
+ if ((*a)->offset < (*b)->offset) result = -1;
+ else if((*a)->offset > (*b)->offset) result = 1;
+ else result = 0;
+
+ return result;
+
+}