Как проверить значение EIP на языке ассемблера?

Я хочу получить текущее значение регистра EIP на языке ассемблера. Это возможно?

3 ответа

Решение

Предполагая 32-битный x86, используйте следующую функцию:

get_eip: mov eax, [esp]
         ret

Затем, чтобы получить значение EIP в EAX, просто:

call get_eip

На x86-64 (в отличие от 32-битной x86), есть RIP-относительная адресация (RIP является 64-битным аналогом EIP). Так что в 64-битном коде вы можете просто сделать

lea rax, [rip]

переместить текущее содержимое RIP в RAX (ты можешь использовать lea но нет mov за это).

    call foo
foo:
    pop eax ; address of foo
Другие вопросы по тегам