diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-09-12 21:21:53 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-09-12 21:21:53 (GMT) |
commit | 680a2ea1523c79741461649b6528c083d2cec603 (patch) | |
tree | ee5ce4d8771e8aac8427c89c12ec200a7668c964 /src/arch | |
parent | 0f1473cba267ad809c8e7d207b5ff5e3998745fc (diff) |
Fixed two more bugs when annotating Dex code items.
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/raw.c | 39 | ||||
-rw-r--r-- | src/arch/raw.h | 3 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/arch/raw.c b/src/arch/raw.c index 8344c23..67d2507 100644 --- a/src/arch/raw.c +++ b/src/arch/raw.c @@ -291,6 +291,45 @@ GArchInstruction *g_raw_instruction_new_uleb128(const GBinContent *content, vmpa /****************************************************************************** * * * Paramètres : content = flux de données à analyser. * +* addr = position courante dans ce flux. [OUT] * +* * +* Description : Crée une instruction de type 'db/dw/etc' pour un sleb128. * +* * +* Retour : Instruction mise en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *g_raw_instruction_new_sleb128(const GBinContent *content, vmpa2t *addr) +{ + GArchInstruction *result; /* Instruction à retourner */ + vmpa2t start; /* Départ original de lecture */ + leb128_t value; /* Valeur sleb128 à représenter*/ + MemoryDataSize leb_size; /* Taille de la valeur */ + + copy_vmpa(&start, addr); + + if (!g_binary_content_read_leb128(content, addr, &value)) + goto grinu_error; + + leb_size = MDS_FROM_BYTES(compute_vmpa_diff(&start, addr)); + assert(leb_size != MDS_UNDEFINED); + + result = g_raw_instruction_new_from_value(&start, leb_size, (uint64_t)value); + + return result; + + grinu_error: + + return NULL; + +} + + +/****************************************************************************** +* * +* Paramètres : content = flux de données à analyser. * * size = taille de chacun des éléments à représenter. * * count = nombre de ces éléments. * * addr = position courante dans ce flux. [OUT] * diff --git a/src/arch/raw.h b/src/arch/raw.h index 18205ed..a2b19b3 100644 --- a/src/arch/raw.h +++ b/src/arch/raw.h @@ -58,6 +58,9 @@ GArchInstruction *g_raw_instruction_new_from_value(const vmpa2t *, MemoryDataSiz /* Crée une instruction de type 'db/dw/etc' pour un uleb128. */ GArchInstruction *g_raw_instruction_new_uleb128(const GBinContent *content, vmpa2t *); +/* Crée une instruction de type 'db/dw/etc' pour un sleb128. */ +GArchInstruction *g_raw_instruction_new_sleb128(const GBinContent *content, vmpa2t *); + /* Crée une instruction de type 'db/dw/etc' étendue. */ GArchInstruction *g_raw_instruction_new_array(const GBinContent *, MemoryDataSize, size_t, vmpa2t *, SourceEndian); |