2016-10-14 6 views
1

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?

Répondre

0

Peut-être un peu en retard pour répondre, mais il semble que vous avez juste à passer l'option à PIN.

Un peu de fond:

Sur le manuel Intel, il y a cette ligne (rien à voir avec MPX, mais il donne un indice):

Add the knob support_jit_api to the Pin command line as Pin tool option: 
    <Pin executable> <pin options> -t <Pin tool> -support_jit_api <Other Pin tool options> -- <Test application> <Test application options> 

Il arrive there's an existing KNOB pour cette option:

KNOB<BOOL> LEVEL_PINCLIENT::KnobJitApi ( KNOB_MODE_WRITEONCE  , 
"pintool:sym" , 
"support_jit_api" , 
"0"  , 
"Enables the Jitted Functions Support" 
) 

comme le bouton de MPX est défini comme:

KNOB<BOOL> knob_mpx_mode(KNOB_MODE_WRITEONCE,"supported:xed","xed_mpx_mode","0","Enable Intel(R) MPX instruction decoding") 

Je suppose que vous suffit de passer l'option PIN:

<Pin executable> <pin options> -t <Pin tool> -xed_mpx_mode <Other Pin tool options> -- <Test application> <Test application options> 

Il semble que ces boutons sont codés en dur sur PIN/PinTools.

+0

Merci pour cette recherche, malheureusement, l'ajout de ces options à la ligne de commande n'aide pas (Pin se plaint toujours des options inconnues). –