gpt4 book ai didi

c - 如何编译使用不推荐使用的函数(例如 gets())的 C 程序

转载 作者:行者123 更新时间:2023-11-30 18:25:36 25 4
gpt4 key购买 nike

对于一项家庭作业,我必须尝试使用​​缓冲区溢出来使一个简单的 C 程序崩溃。我的问题是我的编译器不会编译 gets() 函数,因为它已被弃用且不安全。我理解这一点,但为了举例,我想覆盖它。这是代码:

#include <stdio.h>

int main(int argc, char *argv[]) {

int valid = 0;

// Char arrays w/buffer set to 8 chars
char str1[8];
char str2[8];

next_tag(str1);

//This is where I want to use gets and not fgets or other secure functions...
gets(str2);

if(strncmp(str1, str2, 8) == 0) {
valid = 1;
}

// Print
printf("Buffer 1: str1(%s), str2(%s), valid(%d)\n", str1, str2, valid);


}

我的 gcc 版本是:

rabbitfighter@ECHO:[~/Code/C/BufferOverflowExamples]: gcc -vUsing built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.1/lto-wrapperTarget: x86_64-unknown-linux-gnuConfigured with: /build/gcc/src/gcc-4.9-20140903/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-cloog-backend=isl --disable-isl-version-check --disable-cloog-version-check --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --disable-multilib --disable-werror --enable-checking=releaseThread model: posixgcc version 4.9.1 20140903 (prerelease) (GCC) 

如果有人能帮助我,我将不胜感激。我正在运行 Manjaro Linux (Arch)。

最佳答案

您可以使用 fgets 等“更安全”的函数,并为其指定一个虚假的缓冲区大小,以消除不安全的行为。

大于实际缓冲区的缓冲区大小将使 fgets 超出其范围并可能导致程序崩溃。

仅仅因为枪有保险并不意味着你不能用它射击你的脚。

关于c - 如何编译使用不推荐使用的函数(例如 gets())的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26786646/

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