c - 在研究缓冲区溢出时我应该使用哪个版本的 GCC 或标志?

标签 c linux gcc stack stack-overflow

最近,作为一名计算机工程专业的本科生,我一直在研究缓冲区溢出问题。出于兴趣,我开始研究和研究缓冲区溢出,但是当我试图在我自己的计算机上用 GCC 4.9.1(在 Debian Jessie 中)编译的 C 程序中实现它们时遇到了困难。

我听说在较新的编译器中有各种堆栈溢出保护,所以我认为我的问题是我的编译器版本太新了。要么,要么我没有使用正确的标志(无)进行编译。

那么是否有适合我的 GCC 版本来测试缓冲区溢出?还是我应该使用特定标志来防止堆栈保护和金丝雀?

感谢您的宝贵时间。

最佳答案

使用 -zexecstack -fno-stack-protector 禁用堆栈帧保护和 gcc 的不可执行堆栈。

在您的 Linux 系统上,您还必须使用以下方法禁用地址随机化 (ASLR):

echo 0 > /proc/sys/kernel/randomize_va_space

关于c - 在研究缓冲区溢出时我应该使用哪个版本的 GCC 或标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245447/

相关文章:

c - getchar和putchar的实际用途是什么?

c - 未定义的乘法引用

gcc - 构建包含 LuaJIT 的静态 Linux 二进制文件(使用 musl-libc)时出错

c++ - 逗号分隔的语句是否被视为完整语句? (和其他诊断问题)

c# - 有关 Vault.dll 和 Vaultcli.dll 的信息

c - 对 `main' 和 _sbrk 的 undefined reference - 自己的静态库中的启动代码

linux - 我的 init.d 服务无法识别

c - 如何让 GCC 在编译时评估函数?

linux - 第一列制表符分隔文件中的一个衬里删除字 "id"

linux - 将整个站点从 HTTP 迁移到 HTTPS 对 API 用户有何影响?