summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog19
-rw-r--r--plugins/mobicore/annotations.c62
-rw-r--r--plugins/readdex/class.c55
-rw-r--r--plugins/readdex/code.c50
-rw-r--r--plugins/readdex/header.c70
-rw-r--r--plugins/readdex/ids.c42
-rw-r--r--plugins/readelf/header.c70
-rw-r--r--plugins/readelf/program.c46
-rw-r--r--plugins/readelf/section.c49
-rw-r--r--src/arch/arm/v7/fetch.c2
-rw-r--r--src/format/symbol.c14
-rw-r--r--src/format/symbol.h6
12 files changed, 190 insertions, 295 deletions
diff --git a/ChangeLog b/ChangeLog
index 1dede8b..d8d3c14 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+16-12-13 Cyrille Bagard <nocbos@gmail.com>
+
+ * plugins/mobicore/annotations.c:
+ * plugins/readdex/class.c:
+ * plugins/readdex/code.c:
+ * plugins/readdex/header.c:
+ * plugins/readdex/ids.c:
+ * plugins/readelf/header.c:
+ * plugins/readelf/program.c:
+ * plugins/readelf/section.c:
+ * src/arch/arm/v7/fetch.c:
+ Update code.
+
+ * src/format/symbol.c:
+ Ensure all symbol comments match their symbol address.
+
+ * src/format/symbol.h:
+ Assign the linked instruction address to the new comment.
+
16-12-12 Cyrille Bagard <nocbos@gmail.com>
* configure.ac:
diff --git a/plugins/mobicore/annotations.c b/plugins/mobicore/annotations.c
index 0f91ffb..b53298e 100644
--- a/plugins/mobicore/annotations.c
+++ b/plugins/mobicore/annotations.c
@@ -81,7 +81,7 @@ static bool annotate_mclf_segment_descriptor(GMCLFFormat *format, const char *pr
text = strdup(prefix);
text = stradd(text, _(": start address"));
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -92,7 +92,7 @@ static bool annotate_mclf_segment_descriptor(GMCLFFormat *format, const char *pr
text = strdup(prefix);
text = stradd(text, _(": length"));
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -136,13 +136,13 @@ static bool annotate_mclf_intro(GMCLFFormat *format, vmpa2t *pos)
SET_IMM_DISPLAY(instr, operand, 2, IOD_CHAR);
SET_IMM_DISPLAY(instr, operand, 3, IOD_CHAR);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("MCLF magic number"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("MCLF magic number"));
/* version */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Version"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Version"));
return true;
@@ -176,7 +176,7 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Service flags"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Service flags"));
/* mem_type */
@@ -198,7 +198,7 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
break;
}
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* service_type */
@@ -223,13 +223,13 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
break;
}
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* num_instances */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Number of instances which can be run simultaneously"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Number of instances which can be run simultaneously"));
/* uuid */
@@ -237,7 +237,7 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
g_raw_instruction_mark_as_padding(G_RAW_INSTRUCTION(instr), true);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Loadable service unique identifier (UUID)"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Loadable service unique identifier (UUID)"));
/* driver_id */
@@ -248,49 +248,49 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
else
text = _("Unused Driver ID");
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Number of threads"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Number of threads"));
/* num_threads */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Number of threads"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Number of threads"));
/* text.start */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Virtual text segment: start address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Virtual text segment: start address"));
/* text.len */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Virtual text segment: length"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Virtual text segment: length"));
/* data.start */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Virtual data segment: start address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Virtual data segment: start address"));
/* data.len */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Virtual data segment: length"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Virtual data segment: length"));
/* bss_len */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Length of the BSS segment in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Length of the BSS segment in bytes"));
/* entry */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Virtual start address of service code"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Virtual start address of service code"));
@@ -300,7 +300,7 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Version of the interface the driver exports"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Version of the interface the driver exports"));
@@ -309,19 +309,19 @@ static bool annotate_mclf_header_v1(GMCLFFormat *format, vmpa2t *pos)
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Silicon Provider ID"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Silicon Provider ID"));
/* sip_data */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 3, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Platform specific device identifier"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Platform specific device identifier"));
/* permitted_hw_cfg */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Configuration which is allowed to execute binary"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Configuration which is allowed to execute binary"));
return true;
@@ -365,37 +365,35 @@ static bool annotate_mclf_text_segment_header(GMCLFFormat *format, vmpa2t *pos)
diff = compute_vmpa_diff(&old, pos);
- printf("DIFF : %u\n", (unsigned int)diff);
-
instr = g_raw_instruction_new_array(content, MDS_8_BITS, diff, &old, format->endian);
g_raw_instruction_mark_as_padding(G_RAW_INSTRUCTION(instr), true);
- ADD_RAW_AS_SYM(format, symbol, &old, instr, comment, _("Padding"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Padding"));
/* version */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Version of the TextHeader structure"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Version of the TextHeader structure"));
/* text_header_len */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Size of this structure"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Size of this structure"));
/* required_feat */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Features that Mobicore must understand when loading"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Features that Mobicore must understand when loading"));
/* mc_lib_entry */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Address for McLib entry"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Address for McLib entry"));
/* mc_lib_data */
@@ -408,25 +406,25 @@ static bool annotate_mclf_text_segment_header(GMCLFFormat *format, vmpa2t *pos)
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("McLib base address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("McLib base address"));
/* tl_api_vers */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("TlApi version used when building trustlet"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("TlApi version used when building trustlet"));
/* dr_api_vers */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("DrApi version used when building trustlet"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("DrApi version used when building trustlet"));
/* ta_properties */
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, format->endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Address of _TA_Properties in the TA"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Address of _TA_Properties in the TA"));
return true;
diff --git a/plugins/readdex/class.c b/plugins/readdex/class.c
index 9d9d0af..43455b2 100644
--- a/plugins/readdex/class.c
+++ b/plugins/readdex/class.c
@@ -73,7 +73,6 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
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 */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -99,14 +98,13 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
{
/* class_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index into the type_ids list for this class"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -115,92 +113,85 @@ bool annotate_dex_class_defs(const GDexFormat *format, GtkStatusStack *status)
/* access_flags */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Access flags for the class"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* superclass_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the superclass or NO_INDEX if this class has no superclass"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* interfaces_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the list of interfaces"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* source_file_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the name of the file containing the original source or NO_INDEX"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* annotations_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the annotations structure for this class"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* class_data_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the associated class data for this item"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* static_values_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the list of initial values for static fields"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -247,7 +238,6 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
vmpa2t pos; /* Tête de lecture des symboles*/
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -263,14 +253,13 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
/* static_fields_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_uleb128(content, &pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of static fields defined in this item"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -278,40 +267,37 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
/* instance_fields_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_uleb128(content, &pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of instance fields defined in this item"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* direct_methods_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_uleb128(content, &pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of direct methods defined in this item"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* virtual_methods_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_uleb128(content, &pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of virtual methods defined in this item"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -362,7 +348,6 @@ static bool annotate_dex_class_data(const GDexFormat *format, const GDexClass *c
static bool annotate_dex_encoded_field(const GDexFormat *format, vmpa2t *pos)
{
GBinContent *content; /* Contenu binaire à lire */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -373,14 +358,13 @@ static bool annotate_dex_encoded_field(const GDexFormat *format, vmpa2t *pos)
/* field_idx_diff */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index into the field_ids list for the identity of this field"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -388,14 +372,13 @@ static bool annotate_dex_encoded_field(const GDexFormat *format, vmpa2t *pos)
/* access_flags */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Access flags for the field"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -426,7 +409,6 @@ static bool annotate_dex_encoded_method(const GDexFormat *format, const encoded_
{
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -437,14 +419,13 @@ static bool annotate_dex_encoded_method(const GDexFormat *format, const encoded_
/* method_idx_diff */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index into the method_ids list for the identity of this method"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -452,27 +433,25 @@ static bool annotate_dex_encoded_method(const GDexFormat *format, const encoded_
/* access_flags */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Access flags for the method"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* code_off */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the code structure for this method"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
diff --git a/plugins/readdex/code.c b/plugins/readdex/code.c
index 6c2a36e..62e846f 100644
--- a/plugins/readdex/code.c
+++ b/plugins/readdex/code.c
@@ -68,7 +68,6 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
GBinContent *content; /* Contenu binaire à lire */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -87,14 +86,13 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
/* registers_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of registers used by this code"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -102,40 +100,37 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
/* ins_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of words of incoming arguments to the method that this code is for"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* outs_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of words of outgoing argument space required by this code for method invocation"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* tries_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of try_items for this instance"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -143,27 +138,25 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
/* debug_info_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the debug info sequence for this code"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* insns_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Size of the instructions list, in 16-bit code units"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -177,14 +170,13 @@ bool annotate_dex_code_item(const GDexFormat *format, uleb128_t offset)
if (insns_size % 2 != 0)
{
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Pading"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -227,7 +219,6 @@ static bool annotate_dex_try_item(const GDexFormat *format, vmpa2t *pos)
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
SourceEndian endian; /* Boutisme utilisé */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -242,14 +233,13 @@ static bool annotate_dex_try_item(const GDexFormat *format, vmpa2t *pos)
/* start_addr */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Start address of the block of code covered by this entry"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -257,27 +247,25 @@ static bool annotate_dex_try_item(const GDexFormat *format, vmpa2t *pos)
/* insn_count */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of 16-bit code units covered by this entry"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* handler_off */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset to the encoded_catch_handler for this entry"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -307,7 +295,6 @@ static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *format, vm
{
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -320,14 +307,13 @@ static bool annotate_dex_encoded_catch_handler_list(const GDexFormat *format, vm
/* static_fields_size */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Size of the list, in entries"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -368,7 +354,6 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
{
bool result; /* Bilan à retourner */
GBinContent *content; /* Contenu binaire à lire */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -382,14 +367,13 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
/* size */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_sleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Number of static fields defined in this item"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -413,14 +397,13 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
if (has_catch_all)
{
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Bytecode address of the catch-all handler"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -451,7 +434,6 @@ static bool annotate_dex_encoded_catch_handler(const GDexFormat *format, vmpa2t
static bool annotate_dex_encoded_type_addr_pair(const GDexFormat *format, vmpa2t *pos)
{
GBinContent *content; /* Contenu binaire à lire */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -462,27 +444,25 @@ static bool annotate_dex_encoded_type_addr_pair(const GDexFormat *format, vmpa2t
/* type_idx */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the type of the exception to catch"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* addr */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_uleb128(content, pos);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Bytecode address of the associated exception handler"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
diff --git a/plugins/readdex/header.c b/plugins/readdex/header.c
index 6ebca3f..61d0c83 100644
--- a/plugins/readdex/header.c
+++ b/plugins/readdex/header.c
@@ -48,7 +48,6 @@ bool annotate_dex_header(GDexFormat *format)
GBinContent *content; /* Contenu binaire à lire */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -63,7 +62,6 @@ bool annotate_dex_header(GDexFormat *format)
/* magic */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, DEX_FILE_MAGIC_LEN, &pos, endian);
g_raw_instruction_mark_as_string(G_RAW_INSTRUCTION(instr), true);
@@ -80,208 +78,186 @@ bool annotate_dex_header(GDexFormat *format)
SET_IMM_DISPLAY(instr, operand, 7, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("DEX magic number"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("DEX magic number"));
g_binary_symbol_define_as_block_start(symbol, true);
/* checksum */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("adler32 checksum used to detect file corruption"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("adler32 checksum used to detect file corruption"));
/* signature */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 5, &pos, endian);
g_arch_instruction_set_displayed_max_length(instr, 4);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("SHA-1 signature used to uniquely identify files"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("SHA-1 signature used to uniquely identify files"));
/* file_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Size of the entire file in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Size of the entire file in bytes"));
/* header_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Size of the header in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Size of the header in bytes"));
/* endian_tag */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Endianness tag ; 0x12345678 for little-endian"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Endianness tag ; 0x12345678 for little-endian"));
/* link_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Size of the link section"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Size of the link section"));
/* link_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the link section"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the link section"));
/* map_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the map item"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the map item"));
/* string_ids_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Count of strings in the string identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Count of strings in the string identifiers list"));
/* string_ids_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the string identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the string identifiers list"));
/* type_ids_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Count of elements in the type identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Count of elements in the type identifiers list"));
/* type_ids_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the type identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the type identifiers list"));
/* proto_ids_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Count of elements in the prototype identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Count of elements in the prototype identifiers list"));
/* proto_ids_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the prototype identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the prototype identifiers list"));
/* field_ids_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Count of elements in the field identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Count of elements in the field identifiers list"));
/* field_ids_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the field identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the field identifiers list"));
/* method_ids_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Count of elements in the method identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Count of elements in the method identifiers list"));
/* method_ids_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the method identifiers list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the method identifiers list"));
/* class_defs_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Count of elements in the class definitions list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Count of elements in the class definitions list"));
/* class_defs_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the class definitions list"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the class definitions list"));
/* data_size */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Size of data section in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Size of data section in bytes"));
/* data_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Offset to the start of the data section"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Offset to the start of the data section"));
g_object_unref(G_OBJECT(content));
diff --git a/plugins/readdex/ids.c b/plugins/readdex/ids.c
index c6bef48..1b4e623 100644
--- a/plugins/readdex/ids.c
+++ b/plugins/readdex/ids.c
@@ -57,7 +57,6 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
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 */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -65,6 +64,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
char *text; /* Texte constant à insérer */
phys_t loc; /* Localisation physique */
vmpa2t item_pos; /* Position d'un élément */
+ vmpa2t start; /* Sauvagarde d'une position */
uleb128_t length; /* Taille de la chaîne en cours*/
MemoryDataSize leb_size; /* Taille de la taille */
@@ -83,14 +83,13 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
{
/* Saut vers la définition */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_HEX);
asprintf(&text, _("Offset for string item #%u/%u"), i, header->string_ids_size - 1);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -119,13 +118,12 @@ bool annotate_dex_string_ids(const GDexFormat *format, GtkStatusStack *status)
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("String length"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("String length"));
/* Description de la chaîne : contenu */
if (length > 0)
{
- copy_vmpa(&start, &item_pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, length, &item_pos, endian);
g_raw_instruction_mark_as_string(G_RAW_INSTRUCTION(instr), true);
@@ -168,7 +166,6 @@ bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
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 */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -188,14 +185,13 @@ bool annotate_dex_type_ids(const GDexFormat *format, GtkStatusStack *status)
for (i = 0; i < header->type_ids_size; i++)
{
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the descriptor string of this type"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -236,7 +232,6 @@ bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
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 */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -258,14 +253,13 @@ bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
{
/* shorty_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the short-form descriptor string of this prototype"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -274,27 +268,25 @@ bool annotate_dex_proto_ids(const GDexFormat *format, GtkStatusStack *status)
/* return_type_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the return type of this prototype"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* parameters_off */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Offset to the list of parameter types for this prototype"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -332,7 +324,6 @@ bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
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 */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -354,14 +345,13 @@ bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
{
/* class_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the definer of this field"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -370,27 +360,25 @@ bool annotate_dex_field_ids(const GDexFormat *format, GtkStatusStack *status)
/* type_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the type of this field"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* name_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the name of this field"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -428,7 +416,6 @@ bool annotate_dex_method_ids(const GDexFormat *format, GtkStatusStack *status)
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 */
GDbComment *comment; /* Définition de commentaire */
@@ -450,14 +437,13 @@ bool annotate_dex_method_ids(const GDexFormat *format, GtkStatusStack *status)
{
/* class_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the definer of this field"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
@@ -466,27 +452,25 @@ bool annotate_dex_method_ids(const GDexFormat *format, GtkStatusStack *status)
/* proto_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the prototype of this method"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
/* name_idx */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
asprintf(&text, _("Index for the name of this method"));
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
free(text);
diff --git a/plugins/readelf/header.c b/plugins/readelf/header.c
index 8d9309e..4301cc2 100644
--- a/plugins/readelf/header.c
+++ b/plugins/readelf/header.c
@@ -48,7 +48,6 @@ bool annotate_elf_header(GElfFormat *format)
const elf_header *header; /* En-tête principale */
SourceEndian endian; /* Boutisme utilisé */
vmpa2t pos; /* Tête de lecture des symboles*/
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -65,14 +64,13 @@ bool annotate_elf_header(GElfFormat *format)
/* ELFMAG (0) */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 4, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 1, IOD_CHAR);
SET_IMM_DISPLAY(instr, operand, 2, IOD_CHAR);
SET_IMM_DISPLAY(instr, operand, 3, IOD_CHAR);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("ELF magic number"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("ELF magic number"));
/* EI_CLASS (4) */
@@ -92,12 +90,11 @@ bool annotate_elf_header(GElfFormat *format)
break;
}
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* EI_DATA (5) */
@@ -117,12 +114,11 @@ bool annotate_elf_header(GElfFormat *format)
break;
}
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* EI_VERSION (6) */
@@ -139,12 +135,11 @@ bool annotate_elf_header(GElfFormat *format)
break;
}
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* EI_OSABI (7) */
@@ -197,30 +192,27 @@ bool annotate_elf_header(GElfFormat *format)
break;
}
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* EI_ABIVERSION (8) */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("ABI version"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("ABI version"));
/* Padding */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_8_BITS, 7, &pos, endian);
g_raw_instruction_mark_as_padding(G_RAW_INSTRUCTION(instr), true);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Padding"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Padding"));
/* Champ "e_type" */
@@ -252,12 +244,11 @@ bool annotate_elf_header(GElfFormat *format)
break;
}
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* Champ "e_machine" */
@@ -344,44 +335,39 @@ bool annotate_elf_header(GElfFormat *format)
default: text = _("Architecture: unknown"); break;
}
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* Champ "e_version" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Object file version"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Object file version"));
if (header->hdr32.e_ident[EI_CLASS] == ELFCLASS32)
{
/* Champ "e_entry" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Entry point virtual address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Entry point virtual address"));
/* Champ "e_phoff" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Program header table file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Program header table file offset"));
/* Champ "e_shoff" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section header table file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section header table file offset"));
}
@@ -389,24 +375,21 @@ bool annotate_elf_header(GElfFormat *format)
{
/* Champ "e_entry" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, &pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Entry point virtual address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Entry point virtual address"));
/* Champ "e_phoff" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, &pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Program header table file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Program header table file offset"));
/* Champ "e_shoff" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, &pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section header table file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section header table file offset"));
}
@@ -414,66 +397,59 @@ bool annotate_elf_header(GElfFormat *format)
/* Champ "e_flags" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, &pos, endian);
//SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Processor-specific flags"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Processor-specific flags"));
/* Champ "e_ehsize" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("ELF header size in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("ELF header size in bytes"));
/* Champ "e_phentsize" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Program header table entry size"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Program header table entry size"));
/* Champ "e_phnum" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Program header table entry count"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Program header table entry count"));
/* Champ "e_shentsize" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section header table entry size"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section header table entry size"));
/* Champ "e_shnum" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section header table entry count"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section header table entry count"));
/* Champ "e_shstrndx" */
- copy_vmpa(&start, &pos);
instr = g_raw_instruction_new_array(content, MDS_16_BITS, 1, &pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section header string table index"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section header string table index"));
g_object_unref(G_OBJECT(content));
diff --git a/plugins/readelf/program.c b/plugins/readelf/program.c
index fffb495..eb3bfeb 100644
--- a/plugins/readelf/program.c
+++ b/plugins/readelf/program.c
@@ -57,7 +57,6 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
GBinContent *content; /* Contenu binaire à lire */
ImmOperandDisplay disp; /* Afficahge de valeur */
const char *text; /* Texte constant à insérer */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -139,49 +138,43 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
break;
}
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, disp);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
if (format->is_32b)
{
/* Champ "p_offset" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment file offset"));
/* Champ "p_vaddr" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment virtual address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment virtual address"));
/* Champ "p_paddr" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment physical address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment physical address"));
/* Champ "p_filesz" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment size in file"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment size in file"));
/* Champ "p_memsz" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment size in memory"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment size in memory"));
/* Champ "p_flags" */
@@ -215,19 +208,17 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
if (!filled)
dtext = stradd(dtext, _("none"));
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, dtext);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, dtext);
free(dtext);
/* Champ "p_align" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment alignment"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment alignment"));
}
else
@@ -264,54 +255,47 @@ static bool annotate_elf_program_header(GElfFormat *format, SourceEndian endian,
if (!filled)
dtext = stradd(dtext, _("none"));
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, dtext);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, dtext);
free(dtext);
/* Champ "p_offset" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment file offset"));
/* Champ "p_vaddr" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment virtual address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment virtual address"));
/* Champ "p_paddr" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment physical address"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment physical address"));
/* Champ "p_filesz" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment size in file"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment size in file"));
/* Champ "p_memsz" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment size in memory"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment size in memory"));
/* Champ "p_align" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, pos, instr, comment, _("Segment alignment"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Segment alignment"));
}
diff --git a/plugins/readelf/section.c b/plugins/readelf/section.c
index 815bac9..ed22069 100644
--- a/plugins/readelf/section.c
+++ b/plugins/readelf/section.c
@@ -60,7 +60,6 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
const char *secname; /* Nom d'une section analysée */
ImmOperandDisplay disp; /* Afficahge de valeur */
const char *text; /* Texte constant à insérer */
- vmpa2t start; /* Localisation des symboles */
GArchInstruction *instr; /* Instruction décodée */
GArchOperand *operand; /* Opérande à venir modifier */
GDbComment *comment; /* Définition de commentaire */
@@ -87,12 +86,11 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
dtext = stradd(dtext, "'");
}
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, dtext);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, dtext);
free(dtext);
@@ -214,12 +212,11 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
break;
}
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, disp);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, text);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, text);
/* Champ "sh_flags"... */
@@ -269,123 +266,109 @@ static bool annotate_elf_section_header(GElfFormat *format, SourceEndian endian,
{
/* Champ "sh_flags" (suite) */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, dtext);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, dtext);
free(dtext);
/* Champ "sh_addr" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section virtual addr at execution"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section virtual addr at execution"));
/* Champ "sh_offset" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section file offset"));
/* Champ "sh_size" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section size in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section size in bytes"));
}
else
{
/* Champ "sh_flags" (suite) */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, dtext);
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, dtext);
free(dtext);
/* Champ "sh_addr" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section virtual addr at execution"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section virtual addr at execution"));
/* Champ "sh_offset" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section file offset"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section file offset"));
/* Champ "sh_size" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section size in bytes"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section size in bytes"));
}
/* Champ "sh_link" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Link to another section"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Link to another section"));
/* Champ "sh_info" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Additional section information"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Additional section information"));
if (format->is_32b)
{
/* Champ "sh_addralign" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section alignment"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section alignment"));
/* Champ "sh_entsize" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_32_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Entry size if section holds table"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Entry size if section holds table"));
}
else
{
/* Champ "sh_addralign" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Section alignment"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Section alignment"));
/* Champ "sh_entsize" */
- copy_vmpa(&start, pos);
instr = g_raw_instruction_new_array(content, MDS_64_BITS, 1, pos, endian);
SET_IMM_DISPLAY(instr, operand, 0, IOD_DEC);
- ADD_RAW_AS_SYM(format, symbol, &start, instr, comment, _("Entry size if section holds table"));
+ ADD_RAW_AS_SYM(format, symbol, instr, comment, _("Entry size if section holds table"));
}
diff --git a/src/arch/arm/v7/fetch.c b/src/arch/arm/v7/fetch.c
index 7296717..3fa6bbe 100644
--- a/src/arch/arm/v7/fetch.c
+++ b/src/arch/arm/v7/fetch.c
@@ -462,7 +462,7 @@ void help_fetching_with_instruction_ldr_literal_with_orig(GArchInstruction *inst
vmpa2_virt_to_string(get_mrange_addr(range), MDS_32_BITS, loc, NULL);
snprintf(name, name_len, _("Value used @ %s"), loc);
- ADD_RAW_AS_SYM(G_BIN_FORMAT(format), symbol, &sym_addr, sym_instr, comment, name);
+ ADD_RAW_AS_SYM(G_BIN_FORMAT(format), symbol, sym_instr, comment, name);
free(name);
diff --git a/src/format/symbol.c b/src/format/symbol.c
index fb198d9..48f3dbb 100644
--- a/src/format/symbol.c
+++ b/src/format/symbol.c
@@ -598,6 +598,20 @@ GArchInstruction *g_binary_symbol_get_instruction(const GBinSymbol *symbol)
void g_binary_symbol_set_comment(GBinSymbol *symbol, GDbComment *comment)
{
+#ifndef NDEBUG
+ const vmpa2t *saddr; /* Adresse du symbole */
+ const vmpa2t *caddr; /* Adresse du commentaire */
+#endif
+
+#ifndef NDEBUG
+
+ saddr = get_mrange_addr(g_binary_symbol_get_range(symbol));
+ caddr = g_db_comment_get_address(comment);
+
+ assert(cmp_vmpa(saddr, caddr) == 0);
+
+#endif
+
symbol->comment = comment;
}
diff --git a/src/format/symbol.h b/src/format/symbol.h
index ce452f1..8432d8d 100644
--- a/src/format/symbol.h
+++ b/src/format/symbol.h
@@ -136,10 +136,12 @@ GDbComment *g_binary_symbol_get_comment(const GBinSymbol *);
} \
while (0)
-#define ADD_RAW_AS_SYM(_fmt, _sym, _pos, _ins, _cmt, _txt) \
+#define ADD_RAW_AS_SYM(_fmt, _sym, _ins, _cmt, _txt) \
do \
{ \
- _cmt = g_db_comment_new_inlined(_pos, BLF_HAS_CODE, _txt, false); \
+ const vmpa2t *__addr; \
+ __addr = get_mrange_addr(g_arch_instruction_get_range(_ins)); \
+ _cmt = g_db_comment_new_inlined(__addr, BLF_HAS_CODE, _txt, false); \
g_db_item_set_volatile(G_DB_ITEM(_cmt), true); \
_sym = g_binary_symbol_new(STP_DATA); \
g_binary_symbol_attach_instruction(_sym, _ins); \