Ubuntu GCC正在为get和put调用_fn_chk,如何直接调用不安全函数?

Ubuntu GCC正在为get和put调用_fn_chk,如何直接调用不安全函数?,ubuntu,gcc,debian,glibc,Ubuntu,Gcc,Debian,Glibc,尽管调用了gets和printf,但GCC似乎是在向 call sym.imp.__gets_chk call sym.imp.__printf_chk 我有另一个二进制文件是给我的-我没有编译它。它还再次链接到/lib/i386LinuxGNU/libc.so.6,并直接调用函数。我如何直接与这些函数链接而不与_chk符号链接 我试过使用和不使用-fno-chkp-use-wrappers 当前的构建选项是 -m32 -fno-stack-protector -std=c89 -fno-PI

尽管调用了gets和printf,但GCC似乎是在向

call sym.imp.__gets_chk
call sym.imp.__printf_chk
我有另一个二进制文件是给我的-我没有编译它。它还再次链接到/lib/i386LinuxGNU/libc.so.6,并直接调用函数。我如何直接与这些函数链接而不与_chk符号链接

我试过使用和不使用-fno-chkp-use-wrappers

当前的构建选项是

-m32 -fno-stack-protector -std=c89 -fno-PIE -no-pie -Os -mpreferred-stack-boundary=2 -fno-chkp-use-wrappers
我如何直接与这些函数链接而不与_chk符号链接

不能:必须在没有-fstack-protector的情况下重新编译此代码

我明确拥有-fno堆栈保护器

嗯,您环境中的某些内容定义了uu使用u强化u级别>0

您可以使用以下方法预处理源代码:

gcc -m32 -fno-stack-protector -std=c89 -fno-chkp-use-wrappers -dD -E stack0.c
并验证是否确实定义了“使用加强”级别,并找出其来源。

多亏了“我找到了解决方案”的帮助,我补充道

-D_FORTIFY_SOURCE=0

到我的选择GCC。事实证明,这只有在使用-O时才启用。在我的例子中,我使用的是-Os,这启用了它

我明确地拥有-fno堆栈保护器,我仍然在使用这些函数。这不是一个Windows DLL调用,而是我试图在Ubuntu上使用上述选项进行编译。你在sym.imp.上看到的就是雷达2如何分解它。符号是imp标志空间中的uuu gets_chk。我已经定义了uu USE_FORTIFY_LEVEL 0,这会触发这个吗?我怎样才能知道它是从哪里来的?这是在real.h文件中编译的还是从real.h文件编译的?我在/usr/include/features.h中看到了它,但它似乎被设置为0,这似乎不负责任?当我运行提供的命令时。gcc-m32-fno stack protector-std=c89-fno chkp use wrappers-dD-E stack0.c根本没有提到chk函数?GCC正在这样做吗?或者GCC调用的链接器正在执行此操作?