【发布时间】:2015-03-28 18:32:22
【问题描述】:
上下文
Linux 64 位
问题
是否可以在返回函数之前指示堆栈归零?
我不希望在堆栈上留下有效信息,即使被其他值覆盖。 我明确地想浪费一些时间这样做。
在受控环境中编译时,是否有可能以自动化方式无法绕过?
谢谢
【问题讨论】:
-
请问你为什么要做这样的事情?
-
除非你愿意修补你的编译器,否则自动化几乎肯定是不可能的。 C++ 将允许您对非 POD 类型使用析构函数,但在 C 中没有这样的事情(无论如何也无法在 C++ 中的 POD 类型上这样做)。但是,您始终可以添加范围并覆盖存储,如下所示:
void foo() { {/* actual function goes here*/} volatile int x[1000]={}; } -
我不确定您所说的“在受控环境中编译时无法绕过”是什么意思。
-
可能有更简单的方法(我不知道)。但一种方法是使用“-finstrument-functions”选项。这允许您为每个常规函数调用进入和退出挂钩进入和退出函数。您可以清除退出挂钩中的堆栈。顾名思义,它主要用于仪表。但没有什么可以阻止您将其用于其他目的。
-
@MartinJames 他显然是指当前堆栈帧,而不是整个堆栈。