diff options
Diffstat (limited to 'src/arch/instruction.c')
-rw-r--r-- | src/arch/instruction.c | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/src/arch/instruction.c b/src/arch/instruction.c index 073f55c..21e72b7 100644 --- a/src/arch/instruction.c +++ b/src/arch/instruction.c @@ -134,7 +134,7 @@ void g_arch_instruction_get_location(GArchInstruction *instr, off_t *offset, off * Paramètres : instr = instance à mettre à jour. * * opererand = instruction à venir associer. * * * -* Description : Attache une seule opérande à une instruction. * +* Description : Attache un seul opérande à un instruction. * * * * Retour : - * * * @@ -158,7 +158,7 @@ void g_arch_instruction_attach_one_operand(GArchInstruction *instr, GArchOperand * operand1 = première instruction à venir associer. * * operand2 = seconde instruction à venir associer. * * * -* Description : Attache deux opérandes à une instruction. * +* Description : Attache deux opérandes à un instruction. * * * * Retour : - * * * @@ -179,6 +179,60 @@ void g_arch_instruction_attach_two_operands(GArchInstruction *instr, GArchOperan /****************************************************************************** * * +* Paramètres : instr = instance à mettre à jour. * +* opererand = instruction à venir associer. * +* * +* Description : Attache un opérande supplémentaire à une instruction. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_arch_instruction_attach_extra_operand(GArchInstruction *instr, GArchOperand *operand) +{ + instr->operands_count++; + instr->operands = (GArchOperand **)realloc(instr->operands, instr->operands_count * sizeof(GArchOperand *)); + + instr->operands[instr->operands_count - 1] = operand; + +} + + +/****************************************************************************** +* * +* Paramètres : instr = instance à mettre à jour. * +* opererand = instruction à venir dissocier. * +* * +* Description : Détache un opérande liée d'une instruction. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_arch_instruction_detach_operand(GArchInstruction *instr, GArchOperand *operand) +{ + size_t i; /* Boucle de parcours */ + + for (i = 0; i < instr->operands_count; i++) + if (instr->operands[i] == operand) + break; + + if ((i + 1) < instr->operands_count) + memmove(&instr->operands[i], &instr->operands[i + 1], + (instr->operands_count - i - 1) * sizeof(GArchOperand *)); + + instr->operands_count--; + instr->operands = (GArchOperand **)realloc(instr->operands, instr->operands_count * sizeof(GArchOperand *)); + +} + + +/****************************************************************************** +* * * Paramètres : instr = instruction à traiter. * * format = format du binaire manipulé. * * syntax = type de représentation demandée. * |