【问题标题】:GCC - Linux - Set the stack to zero before returning?GCC - Linux - 在返回之前将堆栈设置为零?
【发布时间】: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 他显然是指当前堆栈帧,而不是整个堆栈。

标签: c linux gcc assembly


【解决方案1】:

一种方法是使用“-finstrument-functions”选项。这允许您为每个常规函数调用入口和出口挂钩入口和出口函数。您可以清除退出挂钩中的堆栈。顾名思义,它主要用于仪表。但没有什么可以阻止您将其用于其他目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多