summaryrefslogtreecommitdiff
path: root/src/arch/x86/op_jump.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/op_jump.c')
-rw-r--r--src/arch/x86/op_jump.c482
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;
}