summaryrefslogtreecommitdiff
path: root/plugins/readdex
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/readdex')
-rw-r--r--plugins/readdex/class.c11
-rw-r--r--plugins/readdex/class.h2
-rw-r--r--plugins/readdex/ids.c55
-rw-r--r--plugins/readdex/ids.h10
-rw-r--r--plugins/readdex/reader.c15
-rw-r--r--plugins/readdex/reader.h2
6 files changed, 75 insertions, 20 deletions
diff --git a/plugins/readdex/class.c b/plugins/readdex/class.c
index d3ca197..64be347 100644
--- a/plugins/readdex/class.c
+++ b/plugins/readdex/class.c
@@ -54,6 +54,7 @@ static bool annotate_dex_encoded_method(const GDexFormat *, const encoded_method
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des classes pour la VM Dalvik. *
* *
@@ -63,13 +64,14 @@ static bool annotate_dex_encoded_method(const GDexFormat *, const encoded_method
* *
******************************************************************************/
-bool annotate_dex_class_defs(const GDexFormat *format)
+bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
const dex_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
+ activity_id_t msg; /* Message de progression */
uint32_t i; /* Boucle de parcours */
vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
@@ -90,6 +92,9 @@ bool annotate_dex_class_defs(const GDexFormat *format)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->class_defs_off, &pos))
return false;
+ msg = gtk_status_stack_add_activity(status, _("Writing annotations for all Dex classes..."),
+ header->class_defs_size);
+
for (i = 0; i < header->class_defs_size && result; i++)
{
/* class_idx */
@@ -209,8 +214,12 @@ bool annotate_dex_class_defs(const GDexFormat *format)
/* TODO : g_object_unref(G_OBJECT(class));*/
+ gtk_status_stack_update_activity_value(status, msg, 1);
+
}
+ gtk_status_stack_remove_activity(status, msg);
+
g_object_unref(G_OBJECT(content));
return result;
diff --git a/plugins/readdex/class.h b/plugins/readdex/class.h
index c2508e3..18b1e49 100644
--- a/plugins/readdex/class.h
+++ b/plugins/readdex/class.h
@@ -30,7 +30,7 @@
/* Commente les définitions des classes pour la VM Dalvik. */
-bool annotate_dex_class_defs(const GDexFormat *);
+bool annotate_dex_class_defs(const GDexFormat *, GtkStatusStack *);
diff --git a/plugins/readdex/ids.c b/plugins/readdex/ids.c
index c9f1cb5..9319b7c 100644
--- a/plugins/readdex/ids.c
+++ b/plugins/readdex/ids.c
@@ -39,6 +39,7 @@
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des chaînes de caractères. *
* *
@@ -48,12 +49,13 @@
* *
******************************************************************************/
-bool annotate_dex_string_ids(const GDexFormat *format)
+bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
{
GBinContent *content; /* Contenu binaire à lire */
const dex_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
+ activity_id_t msg; /* Message de progression */
uint32_t i; /* Boucle de parcours */
vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
@@ -74,6 +76,9 @@ bool annotate_dex_string_ids(const GDexFormat *format)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->string_ids_off, &pos))
return false;
+ msg = gtk_status_stack_add_activity(status, _("Writing annotations for all Dex strings..."),
+ header->string_ids_size);
+
for (i = 0; i < header->string_ids_size; i++)
{
/* Saut vers la définition */
@@ -125,8 +130,12 @@ bool annotate_dex_string_ids(const GDexFormat *format)
ADD_STR_AS_SYM(format, symbol, instr);
+ gtk_status_stack_update_activity_value(status, msg, 1);
+
}
+ gtk_status_stack_remove_activity(status, msg);
+
g_object_unref(G_OBJECT(content));
return true;
@@ -137,6 +146,7 @@ bool annotate_dex_string_ids(const GDexFormat *format)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de types. *
* *
@@ -146,12 +156,13 @@ bool annotate_dex_string_ids(const GDexFormat *format)
* *
******************************************************************************/
-bool annotate_dex_type_ids(const GDexFormat *format)
+bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
{
GBinContent *content; /* Contenu binaire à lire */
const dex_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
+ activity_id_t msg; /* Message de progression */
uint32_t i; /* Boucle de parcours */
vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
@@ -168,6 +179,9 @@ bool annotate_dex_type_ids(const GDexFormat *format)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->type_ids_off, &pos))
return false;
+ msg = gtk_status_stack_add_activity(status, _("Writing annotations for all Dex types..."),
+ header->type_ids_size);
+
for (i = 0; i < header->type_ids_size; i++)
{
copy_vmpa(&start, &pos);
@@ -184,8 +198,12 @@ bool annotate_dex_type_ids(const GDexFormat *format)
if (i == 0)
g_binary_symbol_define_as_block_start(symbol, true);
+ gtk_status_stack_update_activity_value(status, msg, 1);
+
}
+ gtk_status_stack_remove_activity(status, msg);
+
g_object_unref(G_OBJECT(content));
return true;
@@ -196,6 +214,7 @@ bool annotate_dex_type_ids(const GDexFormat *format)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de prototypes. *
* *
@@ -205,12 +224,13 @@ bool annotate_dex_type_ids(const GDexFormat *format)
* *
******************************************************************************/
-bool annotate_dex_proto_ids(const GDexFormat *format)
+bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
{
GBinContent *content; /* Contenu binaire à lire */
const dex_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
+ activity_id_t msg; /* Message de progression */
uint32_t i; /* Boucle de parcours */
vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
@@ -227,6 +247,9 @@ bool annotate_dex_proto_ids(const GDexFormat *format)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->proto_ids_off, &pos))
return false;
+ msg = gtk_status_stack_add_activity(status, _("Writing annotations for all Dex prototypes..."),
+ header->proto_ids_size);
+
for (i = 0; i < header->proto_ids_size; i++)
{
/* shorty_idx */
@@ -271,8 +294,12 @@ bool annotate_dex_proto_ids(const GDexFormat *format)
free(text);
+ gtk_status_stack_update_activity_value(status, msg, 1);
+
}
+ gtk_status_stack_remove_activity(status, msg);
+
g_object_unref(G_OBJECT(content));
return true;
@@ -283,6 +310,7 @@ bool annotate_dex_proto_ids(const GDexFormat *format)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de champs. *
* *
@@ -292,12 +320,13 @@ bool annotate_dex_proto_ids(const GDexFormat *format)
* *
******************************************************************************/
-bool annotate_dex_field_ids(const GDexFormat *format)
+bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
{
GBinContent *content; /* Contenu binaire à lire */
const dex_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
+ activity_id_t msg; /* Message de progression */
uint32_t i; /* Boucle de parcours */
vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
@@ -314,6 +343,9 @@ bool annotate_dex_field_ids(const GDexFormat *format)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->field_ids_off, &pos))
return false;
+ msg = gtk_status_stack_add_activity(status, _("Writing annotations for all Dex fields..."),
+ header->field_ids_size);
+
for (i = 0; i < header->field_ids_size; i++)
{
/* class_idx */
@@ -358,8 +390,12 @@ bool annotate_dex_field_ids(const GDexFormat *format)
free(text);
+ gtk_status_stack_update_activity_value(status, msg, 1);
+
}
+ gtk_status_stack_remove_activity(status, msg);
+
g_object_unref(G_OBJECT(content));
return true;
@@ -370,6 +406,7 @@ bool annotate_dex_field_ids(const GDexFormat *format)
/******************************************************************************
* *
* Paramètres : format = description de l'exécutable à compléter. *
+* status = barre de statut à tenir informée. *
* *
* Description : Commente les définitions des identifiants de méthodes. *
* *
@@ -379,13 +416,14 @@ bool annotate_dex_field_ids(const GDexFormat *format)
* *
******************************************************************************/
-bool annotate_dex_method_ids(const GDexFormat *format)
+bool annotate_dex_method_ids(const GDexFormat *format, GtkStatusStack *status)
{
GBinContent *content; /* Contenu binaire à lire */
const dex_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
uint32_t i; /* Boucle de parcours */
+ activity_id_t msg; /* Message de progression */
vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
@@ -401,6 +439,9 @@ bool annotate_dex_method_ids(const GDexFormat *format)
if (!g_exe_format_translate_offset_into_vmpa(G_EXE_FORMAT(format), header->method_ids_off, &pos))
return false;
+ msg = gtk_status_stack_add_activity(status, _("Writing annotations for all Dex methods..."),
+ header->method_ids_size);
+
for (i = 0; i < header->method_ids_size; i++)
{
/* class_idx */
@@ -445,8 +486,12 @@ bool annotate_dex_method_ids(const GDexFormat *format)
free(text);
+ gtk_status_stack_update_activity_value(status, msg, 1);
+
}
+ gtk_status_stack_remove_activity(status, msg);
+
g_object_unref(G_OBJECT(content));
return true;
diff --git a/plugins/readdex/ids.h b/plugins/readdex/ids.h
index bcbf6de..a3251b7 100644
--- a/plugins/readdex/ids.h
+++ b/plugins/readdex/ids.h
@@ -30,19 +30,19 @@
/* Charge tous les symboles de l'en-tête DEX. */
-bool annotate_dex_string_ids(const GDexFormat *);
+bool annotate_dex_string_ids(const GDexFormat *, GtkStatusStack *);
/* Commente les définitions des identifiants de types. */
-bool annotate_dex_type_ids(const GDexFormat *);
+bool annotate_dex_type_ids(const GDexFormat *, GtkStatusStack *);
/* Commente les définitions des identifiants de prototypes. */
-bool annotate_dex_proto_ids(const GDexFormat *);
+bool annotate_dex_proto_ids(const GDexFormat *, GtkStatusStack *);
/* Commente les définitions des identifiants de champs. */
-bool annotate_dex_field_ids(const GDexFormat *);
+bool annotate_dex_field_ids(const GDexFormat *, GtkStatusStack *);
/* Commente les définitions des identifiants de méthodes. */
-bool annotate_dex_method_ids(const GDexFormat *);
+bool annotate_dex_method_ids(const GDexFormat *, GtkStatusStack *);
diff --git a/plugins/readdex/reader.c b/plugins/readdex/reader.c
index 8df489e..6494973 100644
--- a/plugins/readdex/reader.c
+++ b/plugins/readdex/reader.c
@@ -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. *
+* status = barre de statut à tenir informée. *
* *
* Description : Etablit des symboles complémentaires dans un format DEX. *
* *
@@ -51,7 +52,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)
+G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *plugin, PluginAction action, GBinFormat *format, GtkStatusStack *status)
{
bool result; /* Bilan à retourner */
GDexFormat *dex_fmt; /* Version DEX */
@@ -66,17 +67,17 @@ G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *plugin, PluginAct
result = annotate_dex_header(dex_fmt);
- result &= annotate_dex_string_ids(dex_fmt);
+ result &= annotate_dex_string_ids(dex_fmt, status);
- result &= annotate_dex_type_ids(dex_fmt);
+ result &= annotate_dex_type_ids(dex_fmt, status);
- result &= annotate_dex_proto_ids(dex_fmt);
+ result &= annotate_dex_proto_ids(dex_fmt, status);
- result &= annotate_dex_field_ids(dex_fmt);
+ result &= annotate_dex_field_ids(dex_fmt, status);
- result &= annotate_dex_method_ids(dex_fmt);
+ result &= annotate_dex_method_ids(dex_fmt, status);
- result &= annotate_dex_class_defs(dex_fmt);
+ result &= annotate_dex_class_defs(dex_fmt, status);
hbf_exit:
diff --git a/plugins/readdex/reader.h b/plugins/readdex/reader.h
index 8cccced..15fe873 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 *);
+G_MODULE_EXPORT bool handle_binary_format(const GPluginModule *, PluginAction, GBinFormat *, GtkStatusStack *);