Je veux obtenir la valeur actuelle du registre EIP avec le langage d'assemblage. Est-ce possible?
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
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).
call foo
foo:
pop eax ; address of foo