web-dev-qa-db-fra.com

Comment vérifier la valeur EIP avec le langage d'assemblage?

Je veux obtenir la valeur actuelle du registre EIP avec le langage d'assemblage. Est-ce possible?

34
smwikipedia

En supposant x86 32 bits, utilisez la fonction suivante:

get_eip: mov eax, [esp]
         ret

Ensuite, pour obtenir la valeur d'EIP dans EAX, simplement:

call get_eip
57
user200783

Sur x86-64 (par opposition à x86 32 bits), il y a RIP- adressage relatif (RIP est l'analogue 64 bits de EIP). Donc, en code 64 bits, vous pouvez simplement faire

lea rax, [rip]

pour déplacer le contenu actuel de RIP vers RAX (vous pouvez utiliser lea mais pas mov pour cela).

26
Fabian Giesen
    call foo
foo:
    pop eax ; address of foo
10
Abyx