gpt4 book ai didi

c++ - C++ 中的安全 cookie 是什么?

转载 作者:可可西里 更新时间:2023-11-01 14:52:56 29 4
gpt4 key购买 nike

我从 Google 了解到它用于控制应用程序级别的缓冲区溢出,并由 CRT 调用。它还说

"本质上,在进入一个受溢出保护的函数时,cookie 被放入堆栈,而在退出时,堆栈上的值将与全局 cookie 进行比较。它们之间的任何差异都表明发生了缓冲区溢出并导致程序立即终止。”

但我不太明白它是如何工作的?请帮忙。

最佳答案

“cookie”基本上只是一个任意值。

因此,基本思想是在调用函数之前将选择的值写入堆栈。虽然它可能不是一个很好的值,但我们可以任意选择 0x12345678 作为值。

然后调用函数。

当函数返回时,它返回到堆栈中的正确位置,并将该值与 0x12345678 进行比较。如果该值已更改,则表明被调用的函数写入了允许写入的堆栈区域之外,因此它(以及一般的进程)被视为不可信,并被关闭。

在这种情况下,系统不会选择 0x12345678,而是定期选择不同的值,例如每次系统启动时。这意味着它不太可能意外地达到正确的值——它可能碰巧这样做一次,但如果它在那里写入一个特定的值,当正确/选择的值发生变化时,它最终会写入错误的值,并且问题将被检测到。

可能还值得注意的是,这个基本想法并不是特别新。例如,在 MS-DOS 时代,Borland 和 Microsoft 的编译器都会在程序中调用 main 之前在堆栈的最底部写入一些已知值。 main 返回后,他们将重新检查该值。如果该值与预期值不匹配,它将打印出一条错误消息(就在程序退出时)。

关于c++ - C++ 中的安全 cookie 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19945479/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com