summaryrefslogtreecommitdiff
path: root/src/glibext/gbufferline.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2016-04-23 21:38:02 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2016-04-23 21:38:02 (GMT)
commita5758a42acdfaf0ac20c4cfb9cf162a9b4440e39 (patch)
tree21707c2ad7557d80eeb09e300e6c491868a1871a /src/glibext/gbufferline.c
parent3284ce333cc4b09d9150b59c60005af8e4ddc417 (diff)
Limited the length of displayed SHA1 binary value for Dex files.
Diffstat (limited to 'src/glibext/gbufferline.c')
-rw-r--r--src/glibext/gbufferline.c56
1 files changed, 31 insertions, 25 deletions
diff --git a/src/glibext/gbufferline.c b/src/glibext/gbufferline.c
index f47442d..65e73d0 100644
--- a/src/glibext/gbufferline.c
+++ b/src/glibext/gbufferline.c
@@ -814,7 +814,7 @@ void g_buffer_line_fill_mrange(GBufferLine *line, MemoryDataSize psize, MemoryDa
* psize = taille souhaitée de l'impression des positions. *
* vsize = taille souhaitée de l'impression des adresses. *
* content = contenu binaire global à venir lire. *
-* full = la portion est assez courte pour être entière ? *
+* max = taille maximal de la portion binaire en octets. *
* *
* Description : Construit le tronc commun d'une ligne d'instruction. *
* *
@@ -824,9 +824,10 @@ void g_buffer_line_fill_mrange(GBufferLine *line, MemoryDataSize psize, MemoryDa
* *
******************************************************************************/
-void g_buffer_line_fill_for_instr(GBufferLine *line, MemoryDataSize psize, MemoryDataSize vsize, const GBinContent *content, bool full)
+void g_buffer_line_fill_for_instr(GBufferLine *line, MemoryDataSize psize, MemoryDataSize vsize, const GBinContent *content, phys_t max)
{
phys_t length; /* Taille de la couverture */
+ bool truncated; /* Indique si le code est coupé*/
size_t required; /* Taille de traitement requise*/
char static_buffer[64]; /* Petit tampon local rapide */
char *bin_code; /* Tampon utilisé pour le code */
@@ -846,7 +847,15 @@ void g_buffer_line_fill_for_instr(GBufferLine *line, MemoryDataSize psize, Memor
length = get_mrange_length(&line->range);
- required = length * 3 + 3;
+ truncated = (max != VMPA_NO_PHYSICAL && length > max);
+
+ if (truncated)
+ {
+ length = max;
+ required = length * 3 + 4 /* "..." */ + 1;
+ }
+ else
+ required = length * 3 + 1;
if (required <= sizeof(static_buffer))
bin_code = static_buffer;
@@ -859,40 +868,37 @@ void g_buffer_line_fill_for_instr(GBufferLine *line, MemoryDataSize psize, Memor
for (i = 0, iter = bin_code; i < length; i++, iter += ret)
{
- if (!g_binary_content_read_u8(content, &pos, &byte))
- {
- iter[0] = '?';
- iter[1] = '?';
- }
+ if (i == 0)
+ ret = 0;
else
{
- iter[0] = charset[byte >> 4];
- iter[1] = charset[byte & 0x0f];
+ iter[0] = ' ';
+ ret = 1;
}
- if ((i + 1) < length)
+ if (!g_binary_content_read_u8(content, &pos, &byte))
{
- iter[2] = ' ';
- ret = 3;
+ iter[ret + 0] = '?';
+ iter[ret + 1] = '?';
}
-
else
{
- if (full)
- {
- iter[2] = '\0';
- ret = 2;
- }
- else
- {
- strcpy(iter + 2, "...");
- ret = 5;
- }
-
+ iter[ret + 0] = charset[byte >> 4];
+ iter[ret + 1] = charset[byte & 0x0f];
}
+ ret += 2;
+
}
+ if (truncated)
+ {
+ strcpy(iter, "...");
+ iter += 3;
+ }
+ else
+ *iter = '\0';
+
/* Conclusion */
g_buffer_line_insert_text(line, BLC_BINARY, bin_code, iter - bin_code, RTT_RAW_CODE);