Я хочу получить текущее значение регистра 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