fpo是什么格式?
2021-04-20

FPO

在调试程序的过程中,可能遇到过一两次“FPO”这个词。FPO是指在x86上处理编译器如何访问本地变量和基于堆栈的参数的编译器优化的一个特定类型。

对于使用局部变量(和/或基于堆栈的参数)的函数,编译器需要一种机制来引用堆栈上的这些值。通常,这是通过以下两种方式之一完成的:

直接从堆栈指针(esp)访问局部变量。这是启用FPO优化时的行为。虽然这不需要单独的寄存器来跟踪局部变量和参数的位置,但如果禁用了FPO优化,这会使生成的代码稍微复杂一些。

特别是,由于函数调用或修改堆栈的其他指令等原因,esp中局部变量和参数的位移实际上会随着函数的执行而改变。因此,编译器必须在引用基于堆栈的值的函数中的每个位置跟踪当前esp值的实际位移。

对于编译器来说,这通常不是什么大问题,但是在手工编写的汇编程序中,这可能会变得有点棘手。

指定一个寄存器指向堆栈上相对于局部变量和基于堆栈的参数的固定位置,并使用此寄存器访问局部变量和参数。这是禁用FPO优化时的行为。

约定是使用ebp寄存器访问局部变量和堆栈参数。Ebp通常设置为第一个堆栈参数可以在[Ebp+08]中找到,而局部变量通常位于Ebp的负位移处。

大家都在看
本站系本网编辑转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系,我们将在第一时间删除内容!本站文章版权归原作者所有,内容为作者个人观点。本站只提供参考并不构成任何投资及应用建议。本站拥有对此声明的最终解释权。