2017-03-04 1 views
-2

Dans mon code assembleur, j'ai une ligne qui ditDécodage rappel de montage

callq *%rcx 

Je comprends que cela appelle le rappel de la fonction pointée par rcx. Cependant, je n'ai aucune idée de quoi/où ce rappel est implémenté/ce qu'il fait. Comment puis-je comprendre cela?

+0

Utiliser un ** débogueur ** –

+0

@ user3847447 '% rcx' indique un registre de CPU. S'il n'y a pas d'autre commande précédente qui montre quelle adresse explicite est chargée - l'utilisation du débogueur est vraiment la seule façon de le savoir. (Je suppose que "déboguer par la tête" n'est pas une option dans ce cas ...) – Scheff

+0

Cherchez quelle adresse '% rcx' pointe et désassemble la mémoire à cette adresse. – fuz

Répondre

0

Comment savoir?

(gdb) x/10i $rcx 

vous montrera ce que le code va commencer à exécuter immédiatement après la CALL.

Si ce code a un libellé (c'est-à-dire fait partie d'une fonction nommée), GDB le montrera également, et vous pouvez deviner (ou demander à l'éditeur de liens -Wl,-y,name) d'où vient ce code.

Si ce code n'a pas d'étiquette, il n'y a pas de moyen facile de trouver l'origine. Si vous pouvez relier l'exécutable, l'éditeur de liens -Wl,--print-map peut vous aider.