summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-05-05 21:58:46 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-05-05 21:59:01 (GMT)
commita66f854ce4e19dc0f772fc55a3899643252afa3d (patch)
tree52e46f77acc199904a73e2260117a3a5198aeb86 /plugins
parent07768223823d8c2b0071be8d8e6dfc5ccb891b17 (diff)
Inserted preloaded format information from instructions instead of symbols.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/fmtp/parser.c26
-rw-r--r--plugins/fmtp/parser.h3
-rw-r--r--plugins/readdex/class.c38
-rw-r--r--plugins/readdex/class.h3
-rw-r--r--plugins/readdex/code.c48
-rw-r--r--plugins/readdex/code.h3
-rw-r--r--plugins/readdex/header.c5
-rw-r--r--plugins/readdex/header.h3
-rw-r--r--plugins/readdex/ids.c32
-rw-r--r--plugins/readdex/ids.h11
-rw-r--r--plugins/readdex/reader.c21
-rw-r--r--plugins/readdex/reader.h2
-rw-r--r--plugins/readelf/header.c11
-rw-r--r--plugins/readelf/header.h3
-rw-r--r--plugins/readelf/program.c22
-rw-r--r--plugins/readelf/program.h3
-rw-r--r--plugins/readelf/reader.c15
-rw-r--r--plugins/readelf/reader.h2
-rw-r--r--plugins/readelf/section.c22
-rw-r--r--plugins/readelf/section.h3
-rw-r--r--plugins/readelf/strtab.c17
-rw-r--r--plugins/readelf/strtab.h3
22 files changed, 165 insertions, 131 deletions
diff --git a/plugins/fmtp/parser.c b/plugins/fmtp/parser.c
index 8fc693f..ea1e5d8 100644
--- a/plugins/fmtp/parser.c
+++ b/plugins/fmtp/parser.c
@@ -33,7 +33,7 @@
/* Effectue l'interprétation d'une définition de champ. */
-static bool parse_field_definition(const fmt_field_def *, GBinFormat *, vmpa2t *, void *);
+static bool parse_field_definition(const fmt_field_def *, GBinFormat *, GPreloadInfo *, vmpa2t *, void *);
@@ -41,6 +41,7 @@ static bool parse_field_definition(const fmt_field_def *, GBinFormat *, vmpa2t *
* *
* Paramètres : def = définition de champ à considérer. *
* format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture pour les données. *
* data = infos complémentaires éventuellement fournies. *
* *
@@ -52,7 +53,7 @@ static bool parse_field_definition(const fmt_field_def *, GBinFormat *, vmpa2t *
* *
******************************************************************************/
-static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format, vmpa2t *pos, void *data)
+static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format, GPreloadInfo *info, vmpa2t *pos, void *data)
{
GBinContent *content; /* Contenu binaire à lire */
SourceEndian endian; /* Boutisme utilisé */
@@ -66,10 +67,6 @@ static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format,
uint64_t raw; /* Valeur brute à étudier */
const comment_part *part; /* Accès plus direct */
-
- GBinSymbol *symbol; /* Symbole à intégrer */
-
-
/* Lecture */
content = g_binary_format_get_content(format);
@@ -193,17 +190,11 @@ static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format,
}
- /* Insertion */
+ /* Insertions */
- symbol = g_binary_symbol_new(STP_DATA);
+ g_preload_info_add_instruction(info, instr);
- g_binary_symbol_attach_instruction(symbol, instr);
- g_binary_symbol_set_comment(symbol, comment);
-
- result = g_binary_format_add_symbol(format, symbol);
-
- if (!result)
- g_object_unref(G_OBJECT(instr));
+ g_preload_info_add_comment(info, comment);
pfd_exit:
@@ -219,6 +210,7 @@ static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format,
* Paramètres : defs = liste de définitions à traiter. *
* count = taille de cette liste. *
* format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture pour les données. *
* data = infos complémentaires éventuellement fournies. *
* *
@@ -230,7 +222,7 @@ static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format,
* *
******************************************************************************/
-bool parse_field_definitions(const fmt_field_def *defs, size_t count, GBinFormat *format, vmpa2t *pos, void *data)
+bool parse_field_definitions(const fmt_field_def *defs, size_t count, GBinFormat *format, GPreloadInfo *info, vmpa2t *pos, void *data)
{
bool result; /* Bilan à retourner */
size_t i; /* Boucle de parcours */
@@ -238,7 +230,7 @@ bool parse_field_definitions(const fmt_field_def *defs, size_t count, GBinFormat
result = true;
for (i = 0; i < count && result; i++)
- result = parse_field_definition(defs + i, format, pos, data);
+ result = parse_field_definition(defs + i, format, info, pos, data);
return result;
diff --git a/plugins/fmtp/parser.h b/plugins/fmtp/parser.h
index 0d5dff3..310ff37 100644
--- a/plugins/fmtp/parser.h
+++ b/plugins/fmtp/parser.h
@@ -29,6 +29,7 @@
#include <format/format.h>
+#include <format/preload.h>
#include "def.h"
@@ -36,7 +37,7 @@
/* Lance l'interprétation d'une série de définitions de champs. */
-bool parse_field_definitions(const fmt_field_def *, size_t, GBinFormat *, vmpa2t *, void *);
+bool parse_field_definitions(const fmt_field_def *, size_t, GBinFormat *, GPreloadInfo *, vmpa2t *, void *);
diff --git a/plugins/readdex/class.c b/plugins/readdex/class.c
index 7b7b253..7911c6f 100644
--- a/plugins/readdex/class.c
+++ b/plugins/readdex/class.c
@@ -236,19 +236,20 @@ static fmt_field_def _dex_encoded_method[] = {
/* Commente les définitions des classes pour la VM Dalvik. */
-static bool annotate_dex_class_data(const GDexFormat *, const GDexClass *, uint32_t );
+static bool annotate_dex_class_data(const GDexFormat *, GPreloadInfo *, const GDexClass *, uint32_t );
/* Commente les définitions des champs encodés. */
-static bool annotate_dex_encoded_field(const GDexFormat *, vmpa2t *);
+static bool annotate_dex_encoded_field(const GDexFormat *, GPreloadInfo *, vmpa2t *);
/* Commente les définitions des méthodes encodées. */
-static bool annotate_dex_encoded_method(const GDexFormat *, const encoded_method *, vmpa2t *);
+static bool annotate_dex_encoded_method(const GDexFormat *, GPreloadInfo *, const encoded_method *, vmpa2t *);
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des classes pour la VM Dalvik. *
@@ -259,7 +260,7 @@ static bool annotate_dex_encoded_method(const GDexFormat *, const encoded_method
* *
******************************************************************************/
-bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
+bool annotate_dex_class_defs(const GDexFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const dex_header *header; /* En-tête principale */
@@ -284,7 +285,7 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
for (i = 0; i < header->class_defs_size && result; i++)
{
- result = parse_field_definitions(PARSING_DEFS(_dex_class_defs), bformat, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_class_defs), bformat, info, &pos, NULL);
if (!result) break;
/* Annotations supplémentaires */
@@ -294,7 +295,7 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
def = g_dex_class_get_definition(class);
if (def->class_data_off > 0)
- result = annotate_dex_class_data(format, class, def->class_data_off);
+ result = annotate_dex_class_data(format, info, class, def->class_data_off);
/* TODO : g_object_unref(G_OBJECT(class));*/
@@ -314,6 +315,7 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* class = classe Dex dont les données sont à commenter. *
* offset = tête de lecture physique des symboles. *
* *
@@ -325,7 +327,7 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
* *
******************************************************************************/
-static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *class, uint32_t offset)
+static bool annotate_dex_class_data(const GDexFormat *format, GPreloadInfo *info, const GDexClass *class, uint32_t offset)
{
bool result; /* Bilan à retourner */
vmpa2t pos; /* Tête de lecture des symboles*/
@@ -340,7 +342,7 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
bformat = G_BIN_FORMAT(format);
- result = parse_field_definitions(PARSING_DEFS(_dex_class_data), bformat, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_class_data), bformat, info, &pos, NULL);
if (!result)
goto adcd_exit;
@@ -352,16 +354,16 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
if (data != NULL)
{
for (i = 0; i < data->static_fields_size && result; i++)
- result = annotate_dex_encoded_field(format, &pos);
+ result = annotate_dex_encoded_field(format, info, &pos);
for (i = 0; i < data->instance_fields_size && result; i++)
- result = annotate_dex_encoded_field(format, &pos);
+ result = annotate_dex_encoded_field(format, info, &pos);
for (i = 0; i < data->direct_methods_size && result; i++)
- result = annotate_dex_encoded_method(format, &data->direct_methods[i], &pos);
+ result = annotate_dex_encoded_method(format, info, &data->direct_methods[i], &pos);
for (i = 0; i < data->virtual_methods_size && result; i++)
- result = annotate_dex_encoded_method(format, &data->virtual_methods[i], &pos);
+ result = annotate_dex_encoded_method(format, info, &data->virtual_methods[i], &pos);
}
@@ -375,6 +377,7 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture à faire progresser. [OUT] *
* *
* Description : Commente les définitions des champs encodés. *
@@ -385,14 +388,14 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
* *
******************************************************************************/
-static bool annotate_dex_encoded_field(const GDexFormat *format, vmpa2t *pos)
+static bool annotate_dex_encoded_field(const GDexFormat *format, GPreloadInfo *info, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
GBinFormat *bformat; /* Autre version du format */
bformat = G_BIN_FORMAT(format);
- result = parse_field_definitions(PARSING_DEFS(_dex_encoded_field), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_encoded_field), bformat, info, pos, NULL);
return result;
@@ -402,6 +405,7 @@ static bool annotate_dex_encoded_field(const GDexFormat *format, vmpa2t *pos)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* method = méthode à décrire. *
* pos = tête de lecture à faire progresser. [OUT] *
* *
@@ -413,19 +417,19 @@ static bool annotate_dex_encoded_field(const GDexFormat *format, vmpa2t *pos)
* *
******************************************************************************/
-static bool annotate_dex_encoded_method(const GDexFormat *format, const encoded_method *method, vmpa2t *pos)
+static bool annotate_dex_encoded_method(const GDexFormat *format, GPreloadInfo *info, const encoded_method *method, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
GBinFormat *bformat; /* Autre version du format */
bformat = G_BIN_FORMAT(format);
- result = parse_field_definitions(PARSING_DEFS(_dex_encoded_method), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_encoded_method), bformat, info, pos, NULL);
/* Chargements complémentaires, si non abstraite ni native */
if (result && method->code_off > 0)
- result = annotate_dex_code_item(format, method->code_off);
+ result = annotate_dex_code_item(format, info, method->code_off);
return result;
diff --git a/plugins/readdex/class.h b/plugins/readdex/class.h
index 2df7097..4e71fb2 100644
--- a/plugins/readdex/class.h
+++ b/plugins/readdex/class.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READDEX_CLASS_H
+#include <format/preload.h>
#include <format/dex/dex.h>
/* Commente les définitions des classes pour la VM Dalvik. */
-bool annotate_dex_class_defs(const GDexFormat *, GtkStatusStack *);
+bool annotate_dex_class_defs(const GDexFormat *, GPreloadInfo *, GtkStatusStack *);
diff --git a/plugins/readdex/code.c b/plugins/readdex/code.c
index 23e82ac..3a36c19 100644
--- a/plugins/readdex/code.c
+++ b/plugins/readdex/code.c
@@ -255,16 +255,16 @@ static fmt_field_def _dex_encoded_type_addr_pair[] = {
/* Commente les définitions d'une protection contre exceptions. */
-static bool annotate_dex_try_item(const GDexFormat *, vmpa2t *);
+static bool annotate_dex_try_item(const GDexFormat *, GPreloadInfo *, vmpa2t *);
/*Commente les définitions des listes de gestion d'exceptions. */
-static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *, vmpa2t *);
+static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *, GPreloadInfo *, vmpa2t *);
/* Commente les définitions d'une prise en compte d'exceptions. */
-static bool annotate_dex_encoded_catch_handler(const GDexFormat *, vmpa2t *);
+static bool annotate_dex_encoded_catch_handler(const GDexFormat *, GPreloadInfo *, vmpa2t *);
/* Commente les définitions des gestions d'exceptions par type. */
-static bool annotate_dex_encoded_type_addr_pair(const GDexFormat *, vmpa2t *);
+static bool annotate_dex_encoded_type_addr_pair(const GDexFormat *, GPreloadInfo *, vmpa2t *);
@@ -379,6 +379,7 @@ static bool get_encoded_catch_handler_size_value(const fmt_field_def *def, GBinC
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* *
* Description : Commente les définitions d'un corps de méthode. *
* *
@@ -388,7 +389,7 @@ static bool get_encoded_catch_handler_size_value(const fmt_field_def *def, GBinC
* *
******************************************************************************/
-bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
+bool annotate_dex_code_item(const GDexFormat *format, GPreloadInfo *info, uleb128_t offset)
{
bool result; /* Bilan à retourner */
vmpa2t pos; /* Tête de lecture des symboles*/
@@ -400,7 +401,7 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
if (!result)
goto adci_exit;
- result = parse_field_definitions(PARSING_DEFS(_dex_code_item), G_BIN_FORMAT(format), &pos, &data);
+ result = parse_field_definitions(PARSING_DEFS(_dex_code_item), G_BIN_FORMAT(format), info, &pos, &data);
if (!result)
goto adci_exit;
@@ -412,15 +413,16 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
/* padding */
if (data.insns_size % 2 != 0)
- result = parse_field_definitions(PARSING_DEFS(_dex_code_item_padding), G_BIN_FORMAT(format), &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_code_item_padding),
+ G_BIN_FORMAT(format), info, &pos, NULL);
/* tries */
for (i = 0; i < data.tries_size && result; i++)
- result = annotate_dex_try_item(format, &pos);
+ result = annotate_dex_try_item(format, info, &pos);
if (data.tries_size > 0 && result)
- result = annotate_dex_encoded_catch_handler_list(format, &pos);
+ result = annotate_dex_encoded_catch_handler_list(format, info, &pos);
adci_exit:
@@ -432,6 +434,7 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture pour les symboles. *
* *
* Description : Commente les définitions d'une protection contre exceptions. *
@@ -442,11 +445,11 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
* *
******************************************************************************/
-static bool annotate_dex_try_item(const GDexFormat *format, vmpa2t *pos)
+static bool annotate_dex_try_item(const GDexFormat *format, GPreloadInfo *info, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
- result = parse_field_definitions(PARSING_DEFS(_dex_try_item), G_BIN_FORMAT(format), pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_try_item), G_BIN_FORMAT(format), info, pos, NULL);
return result;
@@ -456,6 +459,7 @@ static bool annotate_dex_try_item(const GDexFormat *format, vmpa2t *pos)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture physique des symboles. *
* *
* Description : Commente les définitions des listes de gestion d'exceptions. *
@@ -466,17 +470,17 @@ static bool annotate_dex_try_item(const GDexFormat *format, vmpa2t *pos)
* *
******************************************************************************/
-static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *format, vmpa2t *pos)
+static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *format, GPreloadInfo *info, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
uleb128_t size; /* Nombre d'entrées */
uleb128_t i; /* Boucle de parcours */
result = parse_field_definitions(PARSING_DEFS(_dex_encoded_catch_handler_list),
- G_BIN_FORMAT(format), pos, &size);
+ G_BIN_FORMAT(format), info, pos, &size);
for (i = 0; i < size && result; i++)
- result = annotate_dex_encoded_catch_handler(format, pos);
+ result = annotate_dex_encoded_catch_handler(format, info, pos);
return result;
@@ -486,6 +490,7 @@ static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *format, vm
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture physique des symboles. *
* *
* Description : Commente les définitions d'une prise en compte d'exceptions. *
@@ -496,14 +501,15 @@ static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *format, vm
* *
******************************************************************************/
-static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t *pos)
+static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, GPreloadInfo *info, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
leb128_t size; /* Nombre de gestionnaires */
bool has_catch_all; /* Gestion par défaut ? */
uleb128_t i; /* Boucle de parcours */
- result = parse_field_definitions(PARSING_DEFS(_dex_encoded_catch_handler), G_BIN_FORMAT(format), pos, &size);
+ result = parse_field_definitions(PARSING_DEFS(_dex_encoded_catch_handler),
+ G_BIN_FORMAT(format), info, pos, &size);
if (!result)
goto adech_exit;
@@ -516,13 +522,13 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
/* handlers */
for (i = 0; i < size && result; i++)
- result = annotate_dex_encoded_type_addr_pair(format, pos);
+ result = annotate_dex_encoded_type_addr_pair(format, info, pos);
/* catch_all_addr */
if (result && has_catch_all)
result = parse_field_definitions(PARSING_DEFS(_dex_encoded_catch_handler_all),
- G_BIN_FORMAT(format), pos, &size);
+ G_BIN_FORMAT(format), info, pos, &size);
adech_exit:
@@ -534,6 +540,7 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* pos = tête de lecture des symboles. *
* *
* Description : Commente les définitions des gestions d'exceptions par type. *
@@ -544,11 +551,12 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
* *
******************************************************************************/
-static bool annotate_dex_encoded_type_addr_pair(const GDexFormat *format, vmpa2t *pos)
+static bool annotate_dex_encoded_type_addr_pair(const GDexFormat *format, GPreloadInfo *info, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
- result = parse_field_definitions(PARSING_DEFS(_dex_encoded_type_addr_pair), G_BIN_FORMAT(format), pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_encoded_type_addr_pair),
+ G_BIN_FORMAT(format), info, pos, NULL);
return result;
diff --git a/plugins/readdex/code.h b/plugins/readdex/code.h
index 7f23ee7..ea70df8 100644
--- a/plugins/readdex/code.h
+++ b/plugins/readdex/code.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READDEX_CODE_H
+#include <format/preload.h>
#include <format/dex/dex.h>
/* Commente les définitions d'un corps de méthode. */
-bool annotate_dex_code_item(const GDexFormat *, uleb128_t);
+bool annotate_dex_code_item(const GDexFormat *, GPreloadInfo *, uleb128_t);
diff --git a/plugins/readdex/header.c b/plugins/readdex/header.c
index d0d0cd7..b5ea776 100644
--- a/plugins/readdex/header.c
+++ b/plugins/readdex/header.c
@@ -294,6 +294,7 @@ static fmt_field_def _dex_header[] = {
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* *
* Description : Charge tous les symboles de l'en-tête DEX. *
* *
@@ -303,7 +304,7 @@ static fmt_field_def _dex_header[] = {
* *
******************************************************************************/
-bool annotate_dex_header(GDexFormat *format)
+bool annotate_dex_header(GDexFormat *format, GPreloadInfo *info)
{
bool result; /* Bilan à retourner */
vmpa2t pos; /* Tête de lecture des symboles*/
@@ -311,7 +312,7 @@ bool annotate_dex_header(GDexFormat *format)
result = g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), 0, &pos);
if (result)
- result = parse_field_definitions(PARSING_DEFS(_dex_header), G_BIN_FORMAT(format), &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_header), G_BIN_FORMAT(format), info, &pos, NULL);
return result;
diff --git a/plugins/readdex/header.h b/plugins/readdex/header.h
index 0d147f7..17c6ccd 100644
--- a/plugins/readdex/header.h
+++ b/plugins/readdex/header.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READDEX_HEADER_H
+#include <format/preload.h>
#include <format/dex/dex.h>
/* Charge tous les symboles de l'en-tête DEX. */
-bool annotate_dex_header(GDexFormat *);
+bool annotate_dex_header(GDexFormat *, GPreloadInfo *);
diff --git a/plugins/readdex/ids.c b/plugins/readdex/ids.c
index 2586eaf..14ad6fb 100644
--- a/plugins/readdex/ids.c
+++ b/plugins/readdex/ids.c
@@ -227,6 +227,7 @@ static bool get_dex_string_length_value(const fmt_field_def *def, GBinContent *c
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des chaînes de caractères. *
@@ -237,7 +238,7 @@ static bool get_dex_string_length_value(const fmt_field_def *def, GBinContent *c
* *
******************************************************************************/
-bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
+bool annotate_dex_string_ids(const GDexFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
@@ -258,7 +259,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
content = g_binary_format_get_content(G_BIN_FORMAT(format));
header = g_dex_format_get_header(format);
- endian = SRE_LITTLE;//g_dex_format_get_endianness(format);
+ endian = g_binary_format_get_endianness(G_BIN_FORMAT(format));
result = g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->string_ids_off, &pos);
@@ -307,7 +308,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
field.comment.parts = parts;
field.comment.pcount = ARRAY_SIZE(parts);
- result = parse_field_definitions(&field, 1, bformat, &pos, &loc);
+ result = parse_field_definitions(&field, 1, bformat, info, &pos, &loc);
if (!result)
break;
@@ -317,7 +318,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), loc, &item_pos))
continue;
- result = parse_field_definitions(PARSING_DEFS(_dex_string_ids_length), bformat, &item_pos, &length);
+ result = parse_field_definitions(PARSING_DEFS(_dex_string_ids_length), bformat, info, &item_pos, &length);
/* Description de la chaîne : contenu */
@@ -327,6 +328,9 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
g_raw_instruction_mark_as_string(G_RAW_INSTRUCTION(instr), true);
+ g_preload_info_add_instruction(info, instr);
+
+ g_object_ref(G_OBJECT(instr));
ADD_STR_AS_SYM(format, symbol, instr);
}
@@ -349,6 +353,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de types. *
@@ -359,7 +364,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
* *
******************************************************************************/
-bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
+bool annotate_dex_type_ids(const GDexFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const dex_header *header; /* En-tête principale */
@@ -382,7 +387,7 @@ bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
for (i = 0; i < header->type_ids_size && result; i++)
{
- result = parse_field_definitions(PARSING_DEFS(_dex_type_ids), bformat, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_type_ids), bformat, info, &pos, NULL);
gtk_status_stack_update_activity_value(status, msg, 1);
@@ -400,6 +405,7 @@ bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de prototypes. *
@@ -410,7 +416,7 @@ bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
* *
******************************************************************************/
-bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
+bool annotate_dex_proto_ids(const GDexFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const dex_header *header; /* En-tête principale */
@@ -433,7 +439,7 @@ bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
for (i = 0; i < header->proto_ids_size && result; i++)
{
- result = parse_field_definitions(PARSING_DEFS(_dex_proto_ids), bformat, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_proto_ids), bformat, info, &pos, NULL);
gtk_status_stack_update_activity_value(status, msg, 1);
@@ -451,6 +457,7 @@ bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de champs. *
@@ -461,7 +468,7 @@ bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
* *
******************************************************************************/
-bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
+bool annotate_dex_field_ids(const GDexFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const dex_header *header; /* En-tête principale */
@@ -484,7 +491,7 @@ bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
for (i = 0; i < header->field_ids_size && result; i++)
{
- result = parse_field_definitions(PARSING_DEFS(_dex_field_ids), bformat, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_field_ids), bformat, info, &pos, NULL);
gtk_status_stack_update_activity_value(status, msg, 1);
@@ -502,6 +509,7 @@ bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de méthodes. *
@@ -512,7 +520,7 @@ bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
* *
******************************************************************************/
-bool annotate_dex_method_ids(const GDexFormat *format, GtkStatusStack *status)
+bool annotate_dex_method_ids(const GDexFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const dex_header *header; /* En-tête principale */
@@ -535,7 +543,7 @@ bool annotate_dex_method_ids(const GDexFormat *format, GtkStatusStack *status)
for (i = 0; i < header->method_ids_size && result; i++)
{
- result = parse_field_definitions(PARSING_DEFS(_dex_method_ids), bformat, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_dex_method_ids), bformat, info, &pos, NULL);
gtk_status_stack_update_activity_value(status, msg, 1);
diff --git a/plugins/readdex/ids.h b/plugins/readdex/ids.h
index 8fe9626..79618ce 100644
--- a/plugins/readdex/ids.h
+++ b/plugins/readdex/ids.h
@@ -25,24 +25,25 @@
#define _PLUGINS_READDEX_IDS_H
+#include <format/preload.h>
#include <format/dex/dex.h>
/* Charge tous les symboles de l'en-tête DEX. */
-bool annotate_dex_string_ids(const GDexFormat *, GtkStatusStack *);
+bool annotate_dex_string_ids(const GDexFormat *, GPreloadInfo *, GtkStatusStack *);
/* Commente les définitions des identifiants de types. */
-bool annotate_dex_type_ids(const GDexFormat *, GtkStatusStack *);
+bool annotate_dex_type_ids(const GDexFormat *, GPreloadInfo *, GtkStatusStack *);
/* Commente les définitions des identifiants de prototypes. */
-bool annotate_dex_proto_ids(const GDexFormat *, GtkStatusStack *);
+bool annotate_dex_proto_ids(const GDexFormat *, GPreloadInfo *, GtkStatusStack *);
/* Commente les définitions des identifiants de champs. */
-bool annotate_dex_field_ids(const GDexFormat *, GtkStatusStack *);
+bool annotate_dex_field_ids(const GDexFormat *, GPreloadInfo *, GtkStatusStack *);
/* Commente les définitions des identifiants de méthodes. */
-bool annotate_dex_method_ids(const GDexFormat *, GtkStatusStack *);
+bool annotate_dex_method_ids(const GDexFormat *, GPreloadInfo *, GtkStatusStack *);
diff --git a/plugins/readdex/reader.c b/plugins/readdex/reader.c
index 5bd7649..645ec5b 100644
--- a/plugins/readdex/reader.c
+++ b/plugins/readdex/reader.c
@@ -33,8 +33,8 @@
-DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readdex", "Displays information about DEX files", "0.1.0",
- PGA_FORMAT_LOADER_LAST);
+DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readdex", "Displays information about DEX files", "0.2.0",
+ PGA_FORMAT_PRELOAD);
/******************************************************************************
@@ -42,6 +42,7 @@ DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readdex", "Displays information about DEX files
* Paramètres : plugin = greffon à manipuler. *
* action = type d'action attendue. *
* format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Etablit des symboles complémentaires dans un format DEX. *
@@ -52,7 +53,7 @@ DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readdex", "Displays information about DEX files
* *
******************************************************************************/
-G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *plugin, PluginAction action, GBinFormat *format, GtkStatusStack *status)
+G_MODULE_EXPORT bool preload_binary_format(const GPluginModule *plugin, PluginAction action, GBinFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
GDexFormat *dex_fmt; /* Version DEX */
@@ -65,19 +66,19 @@ G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *plugin, PluginAct
dex_fmt = G_DEX_FORMAT(format);
- result = annotate_dex_header(dex_fmt);
+ result = annotate_dex_header(dex_fmt, info);
- result &= annotate_dex_string_ids(dex_fmt, status);
+ result &= annotate_dex_string_ids(dex_fmt, info, status);
- result &= annotate_dex_type_ids(dex_fmt, status);
+ result &= annotate_dex_type_ids(dex_fmt, info, status);
- result &= annotate_dex_proto_ids(dex_fmt, status);
+ result &= annotate_dex_proto_ids(dex_fmt, info, status);
- result &= annotate_dex_field_ids(dex_fmt, status);
+ result &= annotate_dex_field_ids(dex_fmt, info, status);
- result &= annotate_dex_method_ids(dex_fmt, status);
+ result &= annotate_dex_method_ids(dex_fmt, info, status);
- result &= annotate_dex_class_defs(dex_fmt, status);
+ result &= annotate_dex_class_defs(dex_fmt, info, status);
hbf_exit:
diff --git a/plugins/readdex/reader.h b/plugins/readdex/reader.h
index f56d928..74a2968 100644
--- a/plugins/readdex/reader.h
+++ b/plugins/readdex/reader.h
@@ -32,7 +32,7 @@
/* Etablit des symboles complémentaires dans un format DEX. */
-G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *, PluginAction, GBinFormat *, GtkStatusStack *);
+G_MODULE_EXPORT bool preload_binary_format(const GPluginModule *, PluginAction, GBinFormat *, GPreloadInfo *, GtkStatusStack *);
diff --git a/plugins/readelf/header.c b/plugins/readelf/header.c
index 4b3cdbc..a83f690 100644
--- a/plugins/readelf/header.c
+++ b/plugins/readelf/header.c
@@ -451,6 +451,7 @@ static fmt_field_def _elf_header_ending[] = {
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* *
* Description : Charge tous les symboles de l'en-tête ELF. *
* *
@@ -460,7 +461,7 @@ static fmt_field_def _elf_header_ending[] = {
* *
******************************************************************************/
-bool annotate_elf_header(GBinFormat *format)
+bool annotate_elf_header(GBinFormat *format, GPreloadInfo *info)
{
bool result; /* Bilan à retourner */
const elf_header *header; /* En-tête principale */
@@ -471,15 +472,15 @@ bool annotate_elf_header(GBinFormat *format)
result = g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), 0, &pos);
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_header_base), format, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_header_base), format, info, &pos, NULL);
if (result)
{
if (header->hdr32.e_ident[EI_CLASS] == ELFCLASS32)
- result = parse_field_definitions(PARSING_DEFS(_elf_header_offset_32), format, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_header_offset_32), format, info, &pos, NULL);
else if (header->hdr32.e_ident[EI_CLASS] == ELFCLASS64)
- result = parse_field_definitions(PARSING_DEFS(_elf_header_offset_64), format, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_header_offset_64), format, info, &pos, NULL);
else
result = false;
@@ -487,7 +488,7 @@ bool annotate_elf_header(GBinFormat *format)
}
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_header_ending), format, &pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_header_ending), format, info, &pos, NULL);
return result;
diff --git a/plugins/readelf/header.h b/plugins/readelf/header.h
index 9d1744e..060a363 100644
--- a/plugins/readelf/header.h
+++ b/plugins/readelf/header.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READELF_HEADER_H
+#include <format/preload.h>
#include <format/elf/elf.h>
/* Charge tous les symboles de l'en-tête ELF. */
-bool annotate_elf_header(GBinFormat *);
+bool annotate_elf_header(GBinFormat *, GPreloadInfo *);
diff --git a/plugins/readelf/program.c b/plugins/readelf/program.c
index b1e253a..a71e1d1 100644
--- a/plugins/readelf/program.c
+++ b/plugins/readelf/program.c
@@ -206,13 +206,14 @@ static fmt_field_def _elf_phdr_64b[] = {
/* Charge tous les symboles liés à un en-tête de programme ELF. */
-static bool annotate_elf_program_header(GElfFormat *, SourceEndian, vmpa2t *);
+static bool annotate_elf_program_header(GElfFormat *, GPreloadInfo *, SourceEndian, vmpa2t *);
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* endian = boutisme présentement utilisé. *
* pos = tête de lecture à déplacer. [OUT] *
* *
@@ -224,7 +225,7 @@ static bool annotate_elf_program_header(GElfFormat *, SourceEndian, vmpa2t *);
* *
******************************************************************************/
-static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian, vmpa2t *pos)
+static bool annotate_elf_program_header(GElfFormat *format, GPreloadInfo *info, SourceEndian endian, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
elf_phdr phdr; /* En-tête de programme ELF */
@@ -287,28 +288,28 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
bformat = G_BIN_FORMAT(format);
- result = parse_field_definitions(PARSING_DEFS(_elf_phdr_base), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_phdr_base), bformat, info, pos, NULL);
if (format->is_32b)
{
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_phdr_32b_a), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_phdr_32b_a), bformat, info, pos, NULL);
if (result)
- result = parse_field_definitions(&flags_field, 1, bformat, pos, NULL);
+ result = parse_field_definitions(&flags_field, 1, bformat, info, pos, NULL);
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_phdr_32b_b), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_phdr_32b_b), bformat, info, pos, NULL);
}
else
{
if (result)
- result = parse_field_definitions(&flags_field, 1, bformat, pos, NULL);
+ result = parse_field_definitions(&flags_field, 1, bformat, info, pos, NULL);
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_phdr_64b), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_phdr_64b), bformat, info, pos, NULL);
}
@@ -322,6 +323,7 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Charge tous les symboles liés aux en-têtes de programme ELF. *
@@ -332,7 +334,7 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
* *
******************************************************************************/
-bool annotate_elf_program_header_table(GElfFormat *format, GtkStatusStack *status)
+bool annotate_elf_program_header_table(GElfFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const elf_header *header; /* En-tête principale */
@@ -359,7 +361,7 @@ bool annotate_elf_program_header_table(GElfFormat *format, GtkStatusStack *statu
for (i = 0; i < e_phnum && result; i++)
{
- result = annotate_elf_program_header(format, endian, &pos);
+ result = annotate_elf_program_header(format, info, endian, &pos);
gtk_status_stack_update_activity_value(status, msg, 1);
diff --git a/plugins/readelf/program.h b/plugins/readelf/program.h
index bee0fa0..0710577 100644
--- a/plugins/readelf/program.h
+++ b/plugins/readelf/program.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READELF_PROGRAM_H
+#include <format/preload.h>
#include <format/elf/elf.h>
/* Charge tous les symboles liés aux en-têtes de programme ELF. */
-bool annotate_elf_program_header_table(GElfFormat *, GtkStatusStack *);
+bool annotate_elf_program_header_table(GElfFormat *, GPreloadInfo *, GtkStatusStack *);
diff --git a/plugins/readelf/reader.c b/plugins/readelf/reader.c
index 62efdf4..47b33a0 100644
--- a/plugins/readelf/reader.c
+++ b/plugins/readelf/reader.c
@@ -34,8 +34,8 @@
-DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readelf", "Displays information about ELF files", "0.1.0",
- PGA_FORMAT_LOADER_LAST);
+DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readelf", "Displays information about ELF files", "0.2.0",
+ PGA_FORMAT_PRELOAD);
/******************************************************************************
@@ -43,6 +43,7 @@ DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readelf", "Displays information about ELF files
* Paramètres : plugin = greffon à manipuler. *
* action = type d'action attendue. *
* format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Etablit des symboles complémentaires dans un format ELF. *
@@ -53,7 +54,7 @@ DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("readelf", "Displays information about ELF files
* *
******************************************************************************/
-G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *plugin, PluginAction action, GBinFormat *format, GtkStatusStack *status)
+G_MODULE_EXPORT bool preload_binary_format(const GPluginModule *plugin, PluginAction action, GBinFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
GElfFormat *elf_fmt; /* Version ELF */
@@ -66,13 +67,13 @@ G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *plugin, PluginAct
elf_fmt = G_ELF_FORMAT(format);
- result = annotate_elf_header(format);
+ result = annotate_elf_header(format, info);
- result &= annotate_elf_program_header_table(elf_fmt, status);
+ result &= annotate_elf_program_header_table(elf_fmt, info, status);
- result &= annotate_elf_section_header_table(elf_fmt, status);
+ result &= annotate_elf_section_header_table(elf_fmt, info, status);
- show_elf_section_string_table(elf_fmt, status);
+ show_elf_section_string_table(elf_fmt, info, status);
hbf_exit:
diff --git a/plugins/readelf/reader.h b/plugins/readelf/reader.h
index 2da1b43..8dfdeb8 100644
--- a/plugins/readelf/reader.h
+++ b/plugins/readelf/reader.h
@@ -32,7 +32,7 @@
/* Etablit des symboles complémentaires dans un format ELF. */
-G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *, PluginAction, GBinFormat *, GtkStatusStack *);
+G_MODULE_EXPORT bool preload_binary_format(const GPluginModule *, PluginAction, GBinFormat *, GPreloadInfo *, GtkStatusStack *);
diff --git a/plugins/readelf/section.c b/plugins/readelf/section.c
index 6161892..eee20b5 100644
--- a/plugins/readelf/section.c
+++ b/plugins/readelf/section.c
@@ -247,13 +247,14 @@ static fmt_field_def _elf_shdr_64b[] = {
/* Charge tous les symboles liés à un en-tête de section ELF. */
-static bool annotate_elf_section_header(GElfFormat *, SourceEndian, const elf_shdr *, vmpa2t *);
+static bool annotate_elf_section_header(GElfFormat *, GPreloadInfo *, SourceEndian, const elf_shdr *, vmpa2t *);
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* endian = boutisme présentement utilisé. *
* strings = section renvoyant vers des chaînes de caractères. *
* pos = tête de lecture à déplacer. [OUT] *
@@ -266,7 +267,7 @@ static bool annotate_elf_section_header(GElfFormat *, SourceEndian, const elf_sh
* *
******************************************************************************/
-static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian, const elf_shdr *strings, vmpa2t *pos)
+static bool annotate_elf_section_header(GElfFormat *format, GPreloadInfo *info, SourceEndian endian, const elf_shdr *strings, vmpa2t *pos)
{
bool result; /* Bilan à retourner */
elf_shdr shdr; /* En-tête de programme ELF */
@@ -370,21 +371,21 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
bformat = G_BIN_FORMAT(format);
- result = parse_field_definitions(&name_field, 1, bformat, pos, NULL);
+ result = parse_field_definitions(&name_field, 1, bformat, info, pos, NULL);
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_sh_type), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_sh_type), bformat, info, pos, NULL);
if (format->is_32b)
{
if (result)
{
flags_field.size = MDS_32_BITS;
- result = parse_field_definitions(&flags_field, 1, bformat, pos, NULL);
+ result = parse_field_definitions(&flags_field, 1, bformat, info, pos, NULL);
}
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_shdr_32b), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_shdr_32b), bformat, info, pos, NULL);
}
else
@@ -392,11 +393,11 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
if (result)
{
flags_field.size = MDS_64_BITS;
- result = parse_field_definitions(&flags_field, 1, bformat, pos, NULL);
+ result = parse_field_definitions(&flags_field, 1, bformat, info, pos, NULL);
}
if (result)
- result = parse_field_definitions(PARSING_DEFS(_elf_shdr_64b), bformat, pos, NULL);
+ result = parse_field_definitions(PARSING_DEFS(_elf_shdr_64b), bformat, info, pos, NULL);
}
@@ -410,6 +411,7 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Charge tous les symboles liés aux en-têtes de section ELF. *
@@ -420,7 +422,7 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
* *
******************************************************************************/
-bool annotate_elf_section_header_table(GElfFormat *format, GtkStatusStack *status)
+bool annotate_elf_section_header_table(GElfFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
const elf_header *header; /* En-tête principale */
@@ -451,7 +453,7 @@ bool annotate_elf_section_header_table(GElfFormat *format, GtkStatusStack *statu
for (i = 0; i < e_shnum && result; i++)
{
- result = annotate_elf_section_header(format, endian, &strings, &pos);
+ result = annotate_elf_section_header(format, info, endian, &strings, &pos);
gtk_status_stack_update_activity_value(status, msg, 1);
diff --git a/plugins/readelf/section.h b/plugins/readelf/section.h
index 3168dab..60e8f34 100644
--- a/plugins/readelf/section.h
+++ b/plugins/readelf/section.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READELF_SECTION_H
+#include <format/preload.h>
#include <format/elf/elf.h>
/* Charge tous les symboles liés aux en-têtes de section ELF. */
-bool annotate_elf_section_header_table(GElfFormat *, GtkStatusStack *);
+bool annotate_elf_section_header_table(GElfFormat *, GPreloadInfo *, GtkStatusStack *);
diff --git a/plugins/readelf/strtab.c b/plugins/readelf/strtab.c
index c94deed..9e625fd 100644
--- a/plugins/readelf/strtab.c
+++ b/plugins/readelf/strtab.c
@@ -33,13 +33,14 @@
/* Affiche les chaînes présentes dans une zone de données. */
-static void parse_elf_string_table(GElfFormat *, const GBinContent *, const mrange_t *, GtkStatusStack *);
+static void parse_elf_string_table(GElfFormat *, GPreloadInfo *, const GBinContent *, const mrange_t *, GtkStatusStack *);
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* content = contenu binaire à analyser. *
* range = espace à couvrir pendant l'analyse. *
* status = barre de statut à tenir informée. *
@@ -52,7 +53,7 @@ static void parse_elf_string_table(GElfFormat *, const GBinContent *, const mran
* *
******************************************************************************/
-static void parse_elf_string_table(GElfFormat *format, const GBinContent *content, const mrange_t *range, GtkStatusStack *status)
+static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const GBinContent *content, const mrange_t *range, GtkStatusStack *status)
{
phys_t length; /* Taille de la couverture */
vmpa2t pos; /* Tête de lecture */
@@ -94,6 +95,9 @@ static void parse_elf_string_table(GElfFormat *format, const GBinContent *conten
g_raw_instruction_mark_as_string(G_RAW_INSTRUCTION(instr), true);
+ g_preload_info_add_instruction(info, instr);
+
+ g_object_ref(G_OBJECT(instr));
ADD_STR_AS_SYM(format, symbol, instr);
/* Jointure avec la chaîne précédente ? */
@@ -126,6 +130,7 @@ static void parse_elf_string_table(GElfFormat *format, const GBinContent *conten
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* info = informations à constituer en avance de phase. *
* status = barre de statut à tenir informée. *
* *
* Description : Affiche les chaînes liées aux sections ELF. *
@@ -136,7 +141,7 @@ static void parse_elf_string_table(GElfFormat *format, const GBinContent *conten
* *
******************************************************************************/
-void show_elf_section_string_table(GElfFormat *format, GtkStatusStack *status)
+void show_elf_section_string_table(GElfFormat *format, GPreloadInfo *info, GtkStatusStack *status)
{
GBinContent *content; /* Contenu binaire à lire */
mrange_t range; /* Espace à parcourir */
@@ -147,17 +152,17 @@ void show_elf_section_string_table(GElfFormat *format, GtkStatusStack *status)
found = find_elf_section_range_by_name(format, ".interp", &range);
if (found)
- parse_elf_string_table(format, content, &range, status);
+ parse_elf_string_table(format, info, content, &range, status);
found = find_elf_section_range_by_name(format, ".shstrtab", &range);
if (found)
- parse_elf_string_table(format, content, &range, status);
+ parse_elf_string_table(format, info, content, &range, status);
found = find_elf_section_range_by_name(format, ".strtab", &range);
if (found)
- parse_elf_string_table(format, content, &range, status);
+ parse_elf_string_table(format, info, content, &range, status);
g_object_unref(G_OBJECT(content));
diff --git a/plugins/readelf/strtab.h b/plugins/readelf/strtab.h
index a3c8c8b..89c178d 100644
--- a/plugins/readelf/strtab.h
+++ b/plugins/readelf/strtab.h
@@ -25,12 +25,13 @@
#define _PLUGINS_READELF_STRTAB_H
+#include <format/preload.h>
#include <format/elf/elf.h>
/* Affiche les chaînes liées aux sections ELF. */
-void show_elf_section_string_table(GElfFormat *, GtkStatusStack *);
+void show_elf_section_string_table(GElfFormat *, GPreloadInfo *, GtkStatusStack *);