sho*_*ton 6 c assembly nasm
最近,我重新编写了一些libc函数,对于其中的某些函数(不需要任何调用或syscall指令,例如strlen),我丢弃了序言和结尾,因为没有它,我的测试就不会失败(也许是还不够复杂)。在同行评审中,有人告诉我,丢弃它们是一种不好的做法,但无法解释原因。
因此,当我调用没有序言/结尾组合的asm函数时,是否会遇到问题?
即使在堆栈上不需要额外空间的情况下,添加它也是一个好习惯吗?
如果出于某些原因是强制性的,为什么汇编器(我使用过nasm)不负责?
fuz*_*fuz 5
如果没有设置正确的堆栈框架,调试器可能很难知道您现在所处的功能。在ELF目标上,如果未显式设置堆栈框架,则必须手动提供CFI数据(请参阅本文)。没有CFI数据,堆栈展开将无法进行,并且调试器可能无法找出您要使用的功能。除非您要手动添加CFI数据(这有些繁琐且容易出错),否则我建议您接受轻微的性能损失,然后设置一个完整的堆栈框架。
归档时间:
8 年,9 月 前
查看次数:
233 次
最近记录:
6 年,4 月 前