diff options
Diffstat (limited to 'src/arch/x86/op_jump.c')
-rw-r--r-- | src/arch/x86/op_jump.c | 482 |
1 files changed, 402 insertions, 80 deletions
diff --git a/src/arch/x86/op_jump.c b/src/arch/x86/op_jump.c index 75e06f2..d7894de 100644 --- a/src/arch/x86/op_jump.c +++ b/src/arch/x86/op_jump.c @@ -21,9 +21,6 @@ */ -#include <malloc.h> - - #include "../instruction-int.h" #include "opcodes.h" #include "operand.h" @@ -38,7 +35,7 @@ * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'ja' (saut 8b si supérieur). * +* Description : Décode une instruction de type 'ja' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -54,7 +51,7 @@ GArchInstruction *x86_read_instr_ja_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -71,7 +68,7 @@ GArchInstruction *x86_read_instr_ja_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'ja' (saut 16/32b si sup.). * +* Description : Décode une instruction de type 'ja' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -90,7 +87,7 @@ GArchInstruction *x86_read_instr_ja_rel1632(const bin_t *data, off_t *pos, off_t if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -107,7 +104,7 @@ GArchInstruction *x86_read_instr_ja_rel1632(const bin_t *data, off_t *pos, off_t * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jb' (saut 8b si inférieur). * +* Description : Décode une instruction de type 'jb' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -123,7 +120,7 @@ GArchInstruction *x86_read_instr_jb_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -140,7 +137,7 @@ GArchInstruction *x86_read_instr_jb_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'je' (saut 16/32b si inf.). * +* Description : Décode une instruction de type 'jb' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -148,18 +145,18 @@ GArchInstruction *x86_read_instr_jb_rel8(const bin_t *data, off_t *pos, off_t le * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jbe_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jb_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ MemoryDataSize oprsize; /* Taille des opérandes */ - result = g_x86_instruction_new(XOP_JBE_REL1632); + result = g_x86_instruction_new(XOP_JB_REL1632); oprsize = g_x86_processor_get_operand_size(proc, prefix); if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -176,7 +173,7 @@ GArchInstruction *x86_read_instr_jbe_rel1632(const bin_t *data, off_t *pos, off_ * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'je' (saut 8b si égal). * +* Description : Décode une instruction de type 'je' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -192,7 +189,7 @@ GArchInstruction *x86_read_instr_je_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -209,7 +206,7 @@ GArchInstruction *x86_read_instr_je_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'je' (saut 16/32b si égal). * +* Description : Décode une instruction de type 'je' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -228,7 +225,7 @@ GArchInstruction *x86_read_instr_je_rel1632(const bin_t *data, off_t *pos, off_t if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -245,7 +242,7 @@ GArchInstruction *x86_read_instr_je_rel1632(const bin_t *data, off_t *pos, off_t * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jg' (saut 8b si supérieur). * +* Description : Décode une instruction de type 'jg' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -261,7 +258,7 @@ GArchInstruction *x86_read_instr_jg_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -278,7 +275,7 @@ GArchInstruction *x86_read_instr_jg_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jg' (saut 16/32b si sup.). * +* Description : Décode une instruction de type 'jg' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -297,7 +294,40 @@ GArchInstruction *x86_read_instr_jg_rel1632(const bin_t *data, off_t *pos, off_t if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jl' (saut 8b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jl_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + + result = g_x86_instruction_new(XOP_JL_REL8); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) + { + g_object_unref(G_OBJECT(result)); return NULL; } @@ -314,7 +344,7 @@ GArchInstruction *x86_read_instr_jg_rel1632(const bin_t *data, off_t *pos, off_t * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jge' (saut 16/32b si sup.). * +* Description : Décode une instruction de type 'jl' (16 ou 32 bits). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -322,18 +352,18 @@ GArchInstruction *x86_read_instr_jg_rel1632(const bin_t *data, off_t *pos, off_t * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jge_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jl_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ MemoryDataSize oprsize; /* Taille des opérandes */ - result = g_x86_instruction_new(XOP_JGE_REL1632); + result = g_x86_instruction_new(XOP_JL_REL1632); oprsize = g_x86_processor_get_operand_size(proc, prefix); if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -350,7 +380,7 @@ GArchInstruction *x86_read_instr_jge_rel1632(const bin_t *data, off_t *pos, off_ * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jl' (saut 8b si inférieur). * +* Description : Décode une instruction de type 'jmp' (petit saut). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -358,15 +388,15 @@ GArchInstruction *x86_read_instr_jge_rel1632(const bin_t *data, off_t *pos, off_ * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jl_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jmp_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ - result = g_x86_instruction_new(XOP_JL_REL8); + result = g_x86_instruction_new(XOP_JMP_REL8); if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -383,7 +413,7 @@ GArchInstruction *x86_read_instr_jl_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jle' (16 ou 32 bits). * +* Description : Décode une instruction de type 'jmp' (grand saut relatif). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -391,18 +421,18 @@ GArchInstruction *x86_read_instr_jl_rel8(const bin_t *data, off_t *pos, off_t le * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jle_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jmp_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ MemoryDataSize oprsize; /* Taille des opérandes */ - result = g_x86_instruction_new(XOP_JLE_REL1632); + result = g_x86_instruction_new(XOP_JMP_REL1632); oprsize = g_x86_processor_get_operand_size(proc, prefix); if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -419,7 +449,7 @@ GArchInstruction *x86_read_instr_jle_rel1632(const bin_t *data, off_t *pos, off_ * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jmp' (petit saut). * +* Description : Décode une instruction de type 'jmp' (16 ou 32 bits). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -427,15 +457,18 @@ GArchInstruction *x86_read_instr_jle_rel1632(const bin_t *data, off_t *pos, off_ * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jmp_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jmp_rm1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ - result = g_x86_instruction_new(XOP_JMP_REL8); + result = g_x86_instruction_new(XOP_JMP_RM1632); - if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_RM1632, oprsize)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -452,7 +485,7 @@ GArchInstruction *x86_read_instr_jmp_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jmp' (grand saut relatif). * +* Description : Décode une instruction de type 'jna' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -460,18 +493,15 @@ GArchInstruction *x86_read_instr_jmp_rel8(const bin_t *data, off_t *pos, off_t l * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jmp_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jna_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ - MemoryDataSize oprsize; /* Taille des opérandes */ - - result = g_x86_instruction_new(XOP_JMP_REL1632); - oprsize = g_x86_processor_get_operand_size(proc, prefix); + result = g_x86_instruction_new(XOP_JNA_REL8); - if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -488,7 +518,7 @@ GArchInstruction *x86_read_instr_jmp_rel1632(const bin_t *data, off_t *pos, off_ * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jmp' (16 ou 32 bits). * +* Description : Décode une instruction de type 'jna' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -496,18 +526,18 @@ GArchInstruction *x86_read_instr_jmp_rel1632(const bin_t *data, off_t *pos, off_ * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jmp_rm1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jna_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ MemoryDataSize oprsize; /* Taille des opérandes */ - result = g_x86_instruction_new(XOP_JMP_RM1632); + result = g_x86_instruction_new(XOP_JNA_REL1632); oprsize = g_x86_processor_get_operand_size(proc, prefix); - if (!x86_read_one_operand(result, data, pos, len, X86_OTP_RM1632, oprsize)) + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -524,7 +554,7 @@ GArchInstruction *x86_read_instr_jmp_rm1632(const bin_t *data, off_t *pos, off_t * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jna' (saut 8b si !supérieur).* +* Description : Décode une instruction de type 'jnb' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -532,15 +562,15 @@ GArchInstruction *x86_read_instr_jmp_rm1632(const bin_t *data, off_t *pos, off_t * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jna_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jnb_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ - result = g_x86_instruction_new(XOP_JNA_REL8); + result = g_x86_instruction_new(XOP_JNB_REL8); if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -557,7 +587,7 @@ GArchInstruction *x86_read_instr_jna_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jnb' (saut 8b si !inférieur).* +* Description : Décode une instruction de type 'jnb' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -565,15 +595,18 @@ GArchInstruction *x86_read_instr_jna_rel8(const bin_t *data, off_t *pos, off_t l * * ******************************************************************************/ -GArchInstruction *x86_read_instr_jnb_rel8(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +GArchInstruction *x86_read_instr_jnb_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) { GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ - result = g_x86_instruction_new(XOP_JNB_REL8); + result = g_x86_instruction_new(XOP_JNB_REL1632); - if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -590,7 +623,7 @@ GArchInstruction *x86_read_instr_jnb_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jne' (saut 8b si !égal). * +* Description : Décode une instruction de type 'jne' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -606,7 +639,7 @@ GArchInstruction *x86_read_instr_jne_rel8(const bin_t *data, off_t *pos, off_t l if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -623,7 +656,7 @@ GArchInstruction *x86_read_instr_jne_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jne' (saut 16/32b si !égal). * +* Description : Décode une instruction de type 'jne' (saut 16/32b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -642,7 +675,7 @@ GArchInstruction *x86_read_instr_jne_rel1632(const bin_t *data, off_t *pos, off_ if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -659,7 +692,7 @@ GArchInstruction *x86_read_instr_jne_rel1632(const bin_t *data, off_t *pos, off_ * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jng' (saut 8b si !supérieur).* +* Description : Décode une instruction de type 'jng' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -675,7 +708,43 @@ GArchInstruction *x86_read_instr_jng_rel8(const bin_t *data, off_t *pos, off_t l if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jng' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jng_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JNG_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); return NULL; } @@ -692,7 +761,7 @@ GArchInstruction *x86_read_instr_jng_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jnl' (saut 8b si !inférieur).* +* Description : Décode une instruction de type 'jnl' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -708,7 +777,43 @@ GArchInstruction *x86_read_instr_jnl_rel8(const bin_t *data, off_t *pos, off_t l if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jnl' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jnl_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JNL_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); return NULL; } @@ -725,7 +830,7 @@ GArchInstruction *x86_read_instr_jnl_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jno' (saut 8b si !débordemt).* +* Description : Décode une instruction de type 'jno' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -741,7 +846,7 @@ GArchInstruction *x86_read_instr_jno_rel8(const bin_t *data, off_t *pos, off_t l if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -758,7 +863,43 @@ GArchInstruction *x86_read_instr_jno_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jnp' (saut 8b si !parité). * +* Description : Décode une instruction de type 'jno' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jno_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JNO_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jnp' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -774,7 +915,43 @@ GArchInstruction *x86_read_instr_jnp_rel8(const bin_t *data, off_t *pos, off_t l if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jnp' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jnp_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JNP_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); return NULL; } @@ -791,7 +968,7 @@ GArchInstruction *x86_read_instr_jnp_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jns' (saut 8b si !signée). * +* Description : Décode une instruction de type 'jns' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -807,7 +984,43 @@ GArchInstruction *x86_read_instr_jns_rel8(const bin_t *data, off_t *pos, off_t l if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jns' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jns_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JNS_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); return NULL; } @@ -824,7 +1037,7 @@ GArchInstruction *x86_read_instr_jns_rel8(const bin_t *data, off_t *pos, off_t l * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jo' (saut 8b si débordement).* +* Description : Décode une instruction de type 'jo' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -840,7 +1053,7 @@ GArchInstruction *x86_read_instr_jo_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -857,7 +1070,43 @@ GArchInstruction *x86_read_instr_jo_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'jp' (saut 8b si parité). * +* Description : Décode une instruction de type 'jo' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jo_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JO_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'jp' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -873,7 +1122,7 @@ GArchInstruction *x86_read_instr_jp_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); return NULL; } @@ -890,7 +1139,44 @@ GArchInstruction *x86_read_instr_jp_rel8(const bin_t *data, off_t *pos, off_t le * addr = adresse virtuelle de l'instruction. * * proc = architecture ciblée par le désassemblage. * * * -* Description : Décode une instruction de type 'js' (saut 8b si signée). * +* Description : Décode une instruction de type 'jp' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_jp_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JP_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'js' (saut 8b). * * * * Retour : Instruction mise en place ou NULL. * * * @@ -906,7 +1192,43 @@ GArchInstruction *x86_read_instr_js_rel8(const bin_t *data, off_t *pos, off_t le if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL8, addr)) { - /* TODO free(result);*/ + g_object_unref(G_OBJECT(result)); + return NULL; + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : data = flux de données à analyser. * +* pos = position courante dans ce flux. [OUT] * +* len = taille totale des données à analyser. * +* addr = adresse virtuelle de l'instruction. * +* proc = architecture ciblée par le désassemblage. * +* * +* Description : Décode une instruction de type 'js' (saut 16/32b). * +* * +* Retour : Instruction mise en place ou NULL. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GArchInstruction *x86_read_instr_js_rel1632(const bin_t *data, off_t *pos, off_t len, vmpa_t addr, X86Prefix prefix, const GX86Processor *proc) +{ + GArchInstruction *result; /* Instruction à retourner */ + MemoryDataSize oprsize; /* Taille des opérandes */ + + result = g_x86_instruction_new(XOP_JS_REL1632); + + oprsize = g_x86_processor_get_operand_size(proc, prefix); + + if (!x86_read_one_operand(result, data, pos, len, X86_OTP_REL1632, oprsize, addr)) + { + g_object_unref(G_OBJECT(result)); return NULL; } |