X86 我对函数声明中GNU汇编程序的开始和结束部分感到困惑

X86 我对函数声明中GNU汇编程序的开始和结束部分感到困惑,x86,gnu,assembly,X86,Gnu,Assembly,我最近一直在学习x86汇编语言通过GNU汇编在Ubuntu上的书籍编程地面上在互联网上的某处 创建函数时,必须有两个部分: 开始时,考虑保存旧的%ebp并设置新的帧指针 推力%ebp 移动%esp,%ebp 最后,它用于恢复旧的%ebp并弹出返回地址 移动%ebp,%esp popl%ebp ret 请帮我知道到底发生了什么,这是用来干什么的。 -为什么他们必须将最底部的堆栈指针复制到%ebp才能设置新的帧指针? -为什么完成后必须将%ebp复制回%esp? -什么时候不带拷贝只是地址 谢谢。这

我最近一直在学习x86汇编语言通过GNU汇编在Ubuntu上的书籍编程地面上在互联网上的某处

创建函数时,必须有两个部分:

开始时,考虑保存旧的%ebp并设置新的帧指针

推力%ebp

移动%esp,%ebp

最后,它用于恢复旧的%ebp并弹出返回地址

移动%ebp,%esp

popl%ebp

ret

请帮我知道到底发生了什么,这是用来干什么的。 -为什么他们必须将最底部的堆栈指针复制到%ebp才能设置新的帧指针? -为什么完成后必须将%ebp复制回%esp? -什么时候不带拷贝只是地址


谢谢。

这是一个函数的危险。解释正在发生的事情、堆栈帧和帧指针寄存器。

这是一个函数的错误。解释正在发生的事情、堆栈帧和帧指针寄存器。

函数序言和尾声通常仅由编译器生成,现在甚至需要在某些体系结构上显式启用tpo。对于编写程序集的程序员来说,这是非常不寻常的。因此,它们远非必须具备的序言:函数序言和尾声通常只由编译器生成,现在甚至需要在某些体系结构上显式启用tpo。对于编写程序集的程序员来说,这是非常不寻常的。因此,它们远不是必须具备的序言:谢谢,链接非常有用。也许,在第一次投票时,我不知道他们怎么称呼它。我对此投了反对票,因为这实际上是一个只提供链接的答案,没有提供任何信息。如果链接断开,则此答案不可用。如果回答中直接出现了回答老年退休金计划特定问题的信息摘要,我会取消否决票。谢谢,链接非常有用。也许,在第一次投票时,我不知道他们怎么称呼它。我对此投了反对票,因为这实际上是一个只提供链接的答案,没有提供任何信息。如果链接断开,则此答案不可用。如果回答中直接出现回答老年退休金计划特定问题的信息摘要,我将取消否决票