Я хочу получить текущее значение регистра EIP с ассемблером. Возможно ли это?
Как проверить значение EIP на ассемблере?
Ответ 1
Предполагая 32-разрядную x86, используйте следующую функцию:
get_eip: mov eax, [esp]
ret
Затем, чтобы получить значение EIP в EAX, просто:
call get_eip
Ответ 2
В x86-64 (в отличие от 32-разрядного x86), там RIP
-отрицательная адресация (RIP
- это 64-разрядный аналог EIP
). Итак, в 64-битном коде вы можете просто сделать
lea rax, [rip]
чтобы переместить текущее содержимое RIP
в RAX
(для этого можно использовать lea
, но не mov
).
Ответ 3
call foo
foo:
pop eax ; address of foo