summaryrefslogtreecommitdiff
path: root/src/analysis/disass/fetch.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2011-10-05 19:34:00 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2011-10-05 19:34:00 (GMT)
commite8d2795d9ec2c8845641863fc42ce39f9e92906b (patch)
tree722b96e48843335f45735a5d01a8dcf0114c870d /src/analysis/disass/fetch.c
parent02cb3aa4e7b18b644b034a5c659c332becf99c9b (diff)
Supported a few more Dalvik opcodes.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@211 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis/disass/fetch.c')
-rw-r--r--src/analysis/disass/fetch.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c
index 575eb06..5f93eba 100644
--- a/src/analysis/disass/fetch.c
+++ b/src/analysis/disass/fetch.c
@@ -23,6 +23,10 @@
#include "fetch.h"
+#ifdef DEBUG
+# include "../../arch/artificial.h"
+#endif
+
/******************************************************************************
@@ -50,6 +54,10 @@ GArchInstruction *disassemble_binary_parts(const GOpenidaBinary *binary, GBinPar
size_t i; /* Boucle de parcours #1 */
off_t sum; /* Somme de toutes les tailles */
off_t done; /* Quantité déjà traitée */
+#ifdef DEBUG
+ unsigned int valid; /* Instructions traduites */
+ unsigned int db; /* Instructions non décodées */
+#endif
off_t pos; /* Début d'une zone binaire */
off_t len; /* Taille de cette même zone */
vmpa_t base; /* Adresse de la zone binaire */
@@ -83,6 +91,11 @@ GArchInstruction *disassemble_binary_parts(const GOpenidaBinary *binary, GBinPar
/* Décodage des instructions */
+#ifdef DEBUG
+ valid = 0;
+ db = 0;
+#endif
+
start = pos;
pos = 0;
@@ -94,11 +107,18 @@ GArchInstruction *disassemble_binary_parts(const GOpenidaBinary *binary, GBinPar
&pos, len, start, addr);
g_arch_instruction_add_to_list(&result, instr);
+#ifdef DEBUG
+ if (G_IS_DB_INSTRUCTION(instr)) db++;
+ else valid++;
+#endif
+
if (pos < len)
gtk_extended_status_bar_update_activity(statusbar, id, (done + pos) * 1.0 / sum);
}
+ g_binary_part_set_checkup(parts[i], valid, db);
+
done += len;
gtk_extended_status_bar_update_activity(statusbar, id, done * 1.0 / sum);