assembly 堆栈中的帧指针是什么?框架到底是什么?(组件中的堆栈)

iovurdzv  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(129)

所以,这里我是如何interpet堆栈,让我知道什么是错的/对的。这适用于任何类型的装配。
它是这样的:
指令
带指令的字节码
添加到指令末尾的添加字节的“堆栈”(如果我没记错的话,这些设置为0,没关系)
有了这个堆栈,我们就有了一个堆栈指针,它将查看最近压入的字节的确切点。然后我们将有一个堆栈底部的堆栈基础(这个值永远不会改变)。因此,如果指令和指示的长度是5000字节,则堆栈基数将是第50001个字节。如果堆栈是额外的2500字节,则堆栈限制将是字节7500。
让我知道这是否正确。现在回答问题:
框架或框架指针究竟是什么?我知道帧是堆栈的一个帧(因此是堆栈的一个特定部分),但这真的让我感到困惑。框架是如何设置的?为什么我们需要一个?帧指针是帧所在的确切字节位置吗?如果是这样,我们怎么知道它有多长?
我查阅了几篇关于框架和框架指针的文章,得到了许多令人困惑的答案。想知道我们是否可以用简单的英语来谈论它,哈哈。

xghobddn

xghobddn1#

框架或框架指针究竟是什么?
这是不同工具集通常使用的约定。在函数入口EBP处|RBP被推入堆栈,然后设置为ESP|RSP,导致[ESP|包含调用函数的EBP值的RSP]|在嵌套函数的情况下,这会创建指向每个函数堆栈的指针的反向链,称为帧和EBP|RBP将被认为是当前帧指针。
请注意,某些工具集包含禁用EBP这种用法的选项|RBP,释放它以用作通用寄存器,而不是用作帧指针。

相关问题