有没有一种方法可以在C ++中销毁调用者的堆栈?

时间:2016-06-10 03:07:40

标签: c++ security callstack unsafe

有一些技巧,C ++程序员确实知道像“范围保护”,也许还有其他涉及临时工具的技巧。

我不是一个练习C ++的程序员,但我想问(好奇心)第三方库是否会以某种方式损害来电者的堆栈。也许涉及突然的破坏者或某种其他范围的终身魔术?

1 个答案:

答案 0 :(得分:3)

  

方式第三方图书馆可能会伤害来电者'堆

每当第三部分库中的代码运行时 - 无论是OS加载程序知道要调用的动态加载库的初始化例程,还是来自客户端应用程序代码的显式调用 - 通常(在大多数操作系统' / implementation& #39;安全模型)具有与客户端应用程序本身一样多的能力来支持堆栈(或任何其他内存);例如:

void library_code()
{
    char x;
    char* p = &x;
    *(p - 2) = 23;  // undefined behaviour - may do nothing or anything,
                    // but usually overwrites stack or SIGSEGVs
    *(p + 54) = 99; // stacks might grow up or down, so may have to + or -
                    // from &x to address in-use stack memory...
}