summaryrefslogtreecommitdiff
path: root/src/format/format.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/format.c')
-rw-r--r--src/format/format.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/format/format.c b/src/format/format.c
index 6128c9a..9f03924 100644
--- a/src/format/format.c
+++ b/src/format/format.c
@@ -147,6 +147,48 @@ GBinContent *g_binary_format_get_content(const GBinFormat *format)
/******************************************************************************
* *
+* Paramètres : format = description de l'exécutable à compléter. *
+* pt = point de l'espace mémoire à considérer. *
+* entry = nature du point fourni. *
+* *
+* Description : Enregistre une adresse comme début d'une zone de code. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void g_binary_format_register_code_point(GBinFormat *format, virt_t pt, bool entry)
+{
+ if (entry)
+ {
+ format->entry_points = (virt_t *)realloc(format->entry_points,
+ ++format->ep_count * sizeof(virt_t));
+
+ format->entry_points[format->ep_count - 1] = pt;
+
+ }
+ else
+ {
+ if (format->xp_count == format->xp_allocated)
+ {
+ format->xp_allocated += EXTRA_POINT_BLOCK;
+
+ format->extra_points = (virt_t *)realloc(format->extra_points,
+ format->xp_allocated * sizeof(virt_t));
+
+ }
+
+ format->extra_points[format->xp_count++] = pt;
+
+ }
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : format = description de l'exécutable à consulter. *
* ctx = contexte de désassemblage à préparer. *
* *
@@ -165,6 +207,9 @@ void g_binary_format_setup_disassembling_context(const GBinFormat *format, GProc
for (i = 0; i < format->ep_count; i++)
g_proc_context_push_drop_point(ctx, format->entry_points[i]);
+ for (i = 0; i < format->xp_count; i++)
+ g_proc_context_push_drop_point(ctx, format->extra_points[i]);
+
}