this StackOverflow post的已接受答案给出了以下解决方案:
get_eip: mov eax, [esp]
ret
但我不明白为什么会这样。为什么EIP
指向保存的ESP
?在我们执行ESP
指令时,不应该SFP
指向EBP
(旧的mov
值)吗? x86程序集中子程序调用的序言如下:
push ebp ; Save the old base pointer value
mov ebp, esp ; Set the new base pointer value
sub esp, ... ; Make room for local variable
那么,保存的EIP
是否应该在ESP
所指向的地址之上再多说一句话?