J'ai la dernière version d'Intel Pin version 3.0 76887.Intel Pin 3.0 ne reconnaît pas les instructions MPX?
J'ai un exemple de jouet permis MPX-:
#include <stdio.h>
int g[10];
int main(int argc, char **argv) {
int x = g[11];
printf("%d\n", x);
return 0;
}
Lorsque compilé avec gcc + MPX, je vois des instructions MPX dans le démontage par objdump
et l'exemple me écrit correctement une violation des limites:
Saw a #BR! status 0 at 0x401798
J'aimerais maintenant compter le nombre total d'instructions spécifiques à l'aide MPX Intel Pin, par exemple, BNDLDX
et BNDMK
.
Ma première tentative a été d'utiliser l'outil livré source/tools/SimpleExamples/trace.cpp
. Cet outil m'a montré NOPs
aux endroits des instructions de MPX.
Dans ma deuxième tentative, j'ai écrit mon propre outil avec l'extrait suivant:
xed_iclass_enum_t iclass = (xed_iclass_enum_t)INS_Opcode(ins);
if (iclass == XED_ICLASS_BNDMK)
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)countBndmk, IARG_END);
Cela ne fonctionne pas, countBndmk est jamais appelé. J'ai revérifié mon code avec d'autres instructions iclasses, et ils ont fonctionné. Il y a donc un problème de Pin (ou XED?) Qui ne reconnaît pas les instructions MPX.
Parcourir les docs, je remarquais un bouton intéressant
KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding")
Ce bouton semble permettre le décodage MPX et est 0
par défaut, et je ne sais pas comment l'activer par commande en ligne ou dans mon outil. Je n'ai trouvé aucune autre référence à ce problème dans le code ou sur internet. Je sais que je pourrais utiliser Intel SDE pour vider la trace de débogage, y compris les instructions MPX. Je me demande s'il existe un moyen d'activer MPX dans Intel Pin. Ou la seule solution est de décoder les opcodes moi-même?
Merci pour cette recherche, malheureusement, l'ajout de ces options à la ligne de commande n'aide pas (Pin se plaint toujours des options inconnues). –