首页 文章

如何编译使用已弃用函数的C程序,例如gets()

提问于
浏览
-1

对于家庭作业,我必须尝试使用缓冲区溢出来破坏简单的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 -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured 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=release
Thread model: posix
gcc version 4.9.1 20140903 (prerelease) (GCC)

如果有人可以帮助我,我将非常感激 . 我正在运行Manjaro Linux(Arch) .

1 回答

  • 5

    您可以使用像fgets这样的“更安全”的函数,并给它一个虚假的缓冲区大小,以便从中获取不安全的行为 .

    缓冲区大小比实际缓冲区大,会让fgets超出其范围并可能导致程序崩溃 .

    仅仅因为枪具有安全性并不意味着你不能用它射击你的脚 .

相关问题