最近我重新编写了一些libc函数在汇编中,并且对于其中一些(不需要任何调用或系统调用指令,如strlen),我放弃了序言和后记,因为我的测试没有没有它就失败了(也许我没有足够复杂的测试)。 在同行评审期间,有人告诉我放弃它是一种不好的做法,但无法解释为什么。编写汇编函数时,序言和结语是强制性的吗?
那么,当我调用没有序言/尾声组合的asm函数时,是否会遇到问题?
即使在堆栈上不需要额外的空间时添加它也是一种很好的做法吗?
如果由于某些原因是强制性的,为什么编译器(我使用nasm)不关心它?
感谢您阅读
在优化的生产代码中,如果不需要,跳过序言/尾声。然而,对于调试或分析,有一个干净的栈帧可能是有用的,许多调试器依赖于此。 – Ctx