GCC正在调用__fn_chk获取和放置,如何直接调用不安全的函数?

时间:2018-11-07 00:02:45

标签: ubuntu gcc debian glibc

尽管调用了getsprintf,但似乎GCC还是在向分发

call sym.imp.__gets_chk
call sym.imp.__printf_chk

我还提供了另一个二进制文件-我没有编译它。它还再次链接/lib/i386-linux-gnu/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


当前的构建选项是

import React, { Component } from 'react';
import { Image } from 'semantic-ui-react'

class SideBar extends Component {
    render() {
        return(
    <header className="main-header">
        <div className="main-header-frame">
            <div className="header-wrapper">
                <Image size="tiny" src="./images/Logo.png" />
                <div className="logo">TEXT</div>
                <nav className="main-navigation-container">
                    <ul className="main-navigation">
                        <li>
                            <a>Test1</a>
                            <ul>
<li>t1</li>
<li>t2</li>
                            </ul>
                        </li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
            )
    }
};

export default SideBar;

2 个答案:

答案 0 :(得分:1)

感谢Employed Russian的帮助,我找到了解决方法,

-D_FORTIFY_SOURCE=0

我对GCC的选择。原来只有在使用-O时才启用此功能。就我而言,我正在使用-Os并启用了它!

答案 1 :(得分:0)

  

如何直接链接这些功能而无需链接_chk符号?

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

  

我明确拥有-fno-stack-protector

好吧,您环境中的某物定义了__USE_FORTIFY_LEVEL > 0

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

gcc -m32 -fno-stack-protector -std=c89 -fno-chkp-use-wrappers -dD -E stack0.c

并验证__USE_FORTIFY_LEVEL的定义确实正确,并找出其来源。