在不使用递归的C程序中,理论上应该可以计算出调用给定函数所需的最大/最坏情况堆栈大小,以及它调用的任何内容.是否有任何免费的开源工具可以从源代码或编译的ELF文件中执行此操作?

或者,有没有办法从ELF文件中提取函数的堆栈帧大小,所以我可以尝试手动解决它?

我正在使用MSPGCC 3.2.3编译MSP430(我知道它是旧版本,但在这种情况下我必须使用它).要分配的堆栈空间在源代码中设置,并且应该尽可能小,以便其余的内存可以用于其他事情.我已经读过你需要考虑中断使用的堆栈空间,但我正在使用的系统已经考虑到了这一点 - 我正在尝试计算出多少额外的空间来添加.另外,我已经读过函数指针使这很困难.在这里使用函数指针的少数地方,我知道它们可以调用哪些函数,因此如果已知调用函数和调用函数所需的堆栈空间,则可以手动考虑这些情况.

静态分析似乎比运行时的堆栈绘制更强大,但如果没有好的静态方法,那么在运行时进行静态分析是一种选择.

编辑:

我找到了GCC的-fstack-usage标志,它在编译时保存了每个函数的帧大小.不幸的是,MSPGCC不支持它.但是对于那些试图在不同平台上做类似事情的人来说,这可能是有用的.

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐