gpt4 book ai didi

c - 中止陷阱而不是缓冲区溢出

转载 作者:太空狗 更新时间:2023-10-29 15:02:55 26 4
gpt4 key购买 nike

我一直在阅读乔恩·埃里克森 (Jon Erickson) 撰写的一本出色的《黑客》一书。我想编译一个缓冲区溢出示例并对其进行调试,但应用程序没有在分配的空间之外写入,而是以“中止陷阱”作为响应。这是 Xcode 或 Mac OS 引入的一些安全预防措施吗?作者使用原始 gcc 和 Debian。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
int value = 5;
char buffer_one[8], buffer_two[8];

strcpy(buffer_one, "one"); /* put "one" into buffer_one */
strcpy(buffer_two, "two"); /* put "two" into buffer_two */

printf("[BEFORE] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
printf("[BEFORE] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
printf("[BEFORE] value is at %p and is %d (0x%08x)\n", &value, value, value);

printf("\n[STRCPY] copying %d bytes into buffer_two\n\n", strlen(argv[1]));
strcpy(buffer_two, argv[1]); /* copy first argument into buffer_two */

printf("[AFTER] buffer_two is at %p and contains \'%s\'\n", buffer_two, buffer_two);
printf("[AFTER] buffer_one is at %p and contains \'%s\'\n", buffer_one, buffer_one);
printf("[AFTER] value is at %p and is %d (0x%08x)\n", &value, value, value);
}

最佳答案

这是溢出保护启动 - 虽然我不确定 XCode/OSX,但使用 gcc 你可以通过 -fno-stack-protector 并且必须关闭 ASLR

linux:  sudo echo 0 > /proc/sys/kernel/randomize_va_space

本文帮助Smashing the Stack in 2011

你应该能够找到如何禁用保护来玩这个代码。

顺便说一句,我正在读同一本书 - 我不得不进行调整/谷歌搜索,以便使一些内容与 2011 年相关。

关于c - 中止陷阱而不是缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883633/

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