Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 使用x86程序集获取EIP的值_Assembly_X86 - Fatal编程技术网

Assembly 使用x86程序集获取EIP的值

Assembly 使用x86程序集获取EIP的值,assembly,x86,Assembly,X86,的公认答案给出了以下解决方案: get_eip: mov eax, [esp] ret 但我不明白为什么会这样。为什么已保存的EIP由ESP指向?执行mov指令时,ESP不应该指向SFP(旧的EBP值)吗?x86程序集中子程序调用的序言如下所示: push ebp ; Save the old base pointer value mov ebp, esp ; Set the new base pointer value sub esp, ... ; Make

的公认答案给出了以下解决方案:

get_eip: mov eax, [esp]
         ret
但我不明白为什么会这样。为什么已保存的
EIP
ESP
指向?执行
mov
指令时,
ESP
不应该指向
SFP
(旧的
EBP
值)吗?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
指向的地址上方多放一个字吗?

是的,但是您可以看到这个函数没有这样的序言。@Jester是没有局部变量或其他东西的函数的一个例外…?这个序言是可选的,通常不用于优化代码。您只需要
子esp
来分配局部变量。@ZizhengTai没有强迫您添加子例程序言,正如您所看到的,
get\u eip
函数没有这样的序言。@fuz哦,我明白了。序言是针对用高级语言(例如C/C+)编写的函数。我们可以随心所欲地编写汇编函数。