diff options
Diffstat (limited to 'src/format/executable.c')
-rw-r--r-- | src/format/executable.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/format/executable.c b/src/format/executable.c index 6b39ac8..ea1b398 100644 --- a/src/format/executable.c +++ b/src/format/executable.c @@ -28,6 +28,9 @@ #include "format.h" +#include <malloc.h> + + /* Initialise la classe des formats d'exécutables génériques. */ static void g_executable_format_class_init(GExeFormatClass *); @@ -162,6 +165,62 @@ GBinPortion *g_exe_format_get_portions(GExeFormat *format) * Paramètres : format = informations chargées à consulter. * * count = quantité de zones listées. [OUT] * * * +* Description : Fournit les espaces mémoires des portions exécutables. * +* * +* Retour : Liste de zones binaires exécutables à libérer après usage. * +* * +* Remarques : - * +* * +******************************************************************************/ + +mrange_t *g_exe_format_get_x_ranges(GExeFormat *format, size_t *count) +{ + mrange_t *result; /* Liste à retourner */ + + typedef struct _x_ranges + { + mrange_t *list; + size_t length; + + } x_ranges; + + x_ranges tmp; /* Sauvegarde de la liste */ + + bool visit_for_x(GBinPortion *portion, x_ranges *ranges) + { + const mrange_t *range; + + if (g_binary_portion_get_rights(portion) & PAC_EXEC) + { + range = g_binary_portion_get_range(portion); + + ranges->list = (mrange_t *)realloc(ranges->list, ++ranges->length * sizeof(mrange_t)); + copy_mrange(&ranges->list[ranges->length - 1], range); + + } + + return true; + + } + + tmp.list = NULL; + tmp.length = 0; + + g_binary_portion_visit(g_exe_format_get_portions(format), (visit_portion_fc)visit_for_x, &tmp); + + result = tmp.list; + *count = tmp.length; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : format = informations chargées à consulter. * +* count = quantité de zones listées. [OUT] * +* * * Description : Fournit les références aux zones binaires à analyser. * * * * Retour : Zones binaires à analyser. * |