assembly Ebp寄存器指向旧Ebp意味着什么

dgtucam1  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(142)

我最近一直在学习x86组件的逆向工程,在我的教程中有一句话说Ebp指向旧的Ebp,但我不明白这一点,它的混乱。
我查了一下其他的帖子,但是没有人回答我的问题。

ee7vknir

ee7vknir1#

一个帧指针指向另一个帧指针的意义在于,这创建了堆栈帧的链表,每个堆栈帧可以用于标识先前(调用,调用)堆栈帧-这意味着(A)调试器可以跟踪调用堆栈,(B)我们可以展开堆栈以进行异常处理(catch/throw)。
(Note需要一些附加的行为/信息来完成这些作业,并且帧指针机制只是完成堆栈跟踪的几种方式之一)。
当前ebp是指当前帧已存储先前ebp值的位置。
这样就创建了一个经典的单链表,所以,解引用当前ebp并得到先前ebp的值,对先前也这样做并得到先前ebp的值。
因为前一个ebp是作为新调用函数的第一次推送而推送的,而新调用函数是使用某个调用指令调用的,所以我们知道堆栈上每个旧ebp值的正上方都有一个返回地址。
由于返回地址总是紧挨着ebp,因此我们可以跟踪每个ebp找到它的调用者(调用者的帧),我们可以找到执行调用的代码-这需要使用返回地址和一些范围检查来识别调用函数。由指向前一帧的ebp值创建的链表的关键元素是访问堆栈帧中的返回地址(甚至函数中的哪个位置)进行调用。

相关问题