gpt4 book ai didi

variables - 局部变量在栈上的顺序是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:58 27 4
gpt4 key购买 nike

我目前正在尝试对缓冲区溢出漏洞进行一些测试。这是易受攻击的代码

void win()
{
printf("code flow successfully changed\n");
}

int main(int argc, char **argv)
{
volatile int (*fp)();
char buffer[64];

fp = 0;

gets(buffer);

if(fp) {
printf("calling function pointer, jumping to 0x%08x\n", fp);
fp();
}
}

利用非常简单且非常简单:我在这里需要做的就是溢出缓冲区并覆盖 fp 值以使其保存 win() 函数的地址。在尝试调试程序时,我发现 fb 位于缓冲区下方(即内存中的较低地址),因此我无法修改它的值。我认为一旦我们在 y 之前声明了一个局部变量 xx 将在内存中更高(即在堆栈的底部)所以x 可以覆盖 y 如果它超出了它的边界,这里不是这种情况。我正在使用 gcc gcc 版本 5.2.1 编译程序,没有特殊标志(仅测试 -O0)

有什么线索吗?

最佳答案

局部变量在栈上的顺序是未指定的。

它可能会在不同的编译器、不同的版本或不同的优化选项之间发生变化。它甚至可能取决于变量的名称或其他看似无关的事物。

关于variables - 局部变量在栈上的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867757/

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