C++小协程栈和临时变量及作用域的栈溢出问题分析
背景
近期在给一个项目换一些底层接口的日志处理部分。把原始的类 printf 的格式化方式换成 fmtlib / C++ 20 Text Formatting 的方案。
然后发现,替换完一段未执行的代码后,会发生内存写坏的情况。
问题分析
通过跟踪生成的汇编和 gdb 的 info frame 位置。发现替换之后,栈帧位置大幅增加了。比如对这类代码:
近期在给一个项目换一些底层接口的日志处理部分。把原始的类 printf 的格式化方式换成 fmtlib / C++ 20 Text Formatting 的方案。
然后发现,替换完一段未执行的代码后,会发生内存写坏的情况。
通过跟踪生成的汇编和 gdb 的 info frame 位置。发现替换之后,栈帧位置大幅增加了。比如对这类代码: