Je travaille sur instrumenter un morceau de code assembleur et je note les phénomènes intéressants suivants:L'instrumentation d'une instruction bénigne est suspendu le programme
L'assemblage d'origine:
64 .loc 1 22 0 is_stmt 0 discriminator 1
65 cmpl $31, -4(%rbp) #, i
66 jg .L2 #,
assemblage instrumenté:
64 .loc 1 22 0 is_stmt 0 discriminator 1
65 cmpl $31, -4(%rbp) #, i
66 addq $15, %r15
67 jg .L2 #,
Premièrement, r15
n'est utilisé par aucune autre partie de l'assemblage (assurée par gcc --fixed-r15
). Après avoir ajouté un seul addq
, le programme se bloque (comme s'il y avait une boucle morte). Je n'ai pas compris quelle est la signification de ce add
alors j'ai essayé de le mettre à d'autres endroits. Fait intéressant, j'ai trouvé que chaque fois qu'il est ajouté après une section avec discriminator 1
, alors certaines erreurs se produiraient. Une idée? Je ne pouvais pas entièrement comprendre le discriminator
après une lecture de this. Continuera à lire.
Une idée?
Vous avez tout à fait raison. Donc, je suis en train de trouver comment ajouter les instructions dont j'ai besoin correctement. Où puis-je trouver des informations sur les drapeaux qui sont modifiés? Je suppose que le manuel d'Intel en est un ... – qweruiop
Le guide des développeurs de logiciels Intel est certainement un endroit, mais le [wiki tag x86] (http://stackoverflow.com/tags/x86/info) ici sur SO a une tonne d'autres de bons liens, y compris des références beaucoup plus compactes que les guides de plus de 1 000 pages. – BeeOnRope
BTW, l'instruction 'lea' vous permet d'ajouter deux registres (et plus) sans modifier les drapeaux. – BeeOnRope