Cette structure permet d'obtenir des informations sur l'instruction analysée.
struct INSTRTYPE { long Category; long Opcode; char Mnemonic[16]; long BranchType; EFLStruct Flags; long long AddrValue; long long Immediat; long ImplicitModifiedRegs; };
Membres
Category
[out] Spécifie la famille à laquelle l'instruction utilisée appartient. Plus précisément, (MyDisasm.Instruction.Category & 0xFFFF0000) permet de savoir s'il s'agit d'une instruction standard, MMX, FPU, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, VMX ou SYSTEM. LOWORD(MyDisasm.Instruction.Category) permet de savoir s'il s'agit d'une instruction arithmétique, logique, de transfert ... Pour obtenir une liste exhaustive , voir les constantes utilisées par BeaEngine ICI .
Opcode
[out] Ce champ donne la valeur de l'opcode sur 1, 2 ou 3 bytes. Si l'instruction utilise un mandatory prefix, ce dernier n'apparaît pas ici. Il faut alors consulter la structure MyDisasm.Prefix.
Mnemonic
[out] Ce champ renvoie le mnémonic de l'instruction au format ASCII. Il est à savoir que le mnémonic est toujours suivi d'un espace (0x20). Par exemple, l'instruction "add" sera écrite "add ".
BranchType
[out] Si l'instruction désassemblée est une instruction de branche, ce champ est renseigné pour préciser s'il s'agit d'un saut conditionnel, inconditionnel, d'un call ou d'un ret. Pour obtenir une liste exhaustive , voir les constantes utilisées par BeaEngine ICI
Flags
[out] Structure de type EFLStruct qui indique les flags modifiés.
AddrValue
[out] Si l'instruction est une instruction de branche pour laquelle l'adresse de destination est calculable, ce champ est renseigné et renferme cette adresse de destination. Un "jmp eax" ou un "jmp [eax]" donneront 0 pour ce champ (destinations non calculables).
Immediat
[out] Si l'instruction utilise une constante "immediat", ce champ est renseigné.
ImplicitModifiedRegs
[out] Certaines instructions modifient des registres de façon implicite. Par exemple, "push 0" modifie le registre ESP. Dans ce cas, MyDisasm.Instruction.ImplicitModifiedRegs == REGISTER_TYPE + GENERAL_REG + REG4.