GCC安全编译选项

ops/2025/1/15 12:16:00/

文章目录

  • GCC安全编译选项
    • 1.BIND_NOW
    • 2.NX
    • 3.PIC
    • 4.PIE
    • 5.SP
    • 6.NO Rpath/Runpath
    • 7.FS
    • 8.Ftrapv
    • 9.Strip
    • 10.安全编译Python

GCC安全编译选项

1.BIND_NOW

定义:立即绑定,打开GOT表重定位只读选项

使用方式:LDFlAGS="-Wl,-z,relro,-z,now" ./configure

2.NX

堆栈不可执行:打开堆栈不可执行/数据执行保护选项实现堆栈不可执行保护

使用方式:LDFLAGS="-WL,-z,noexecstack" ./configure

3.PIC

定义:地址无关:打开地址随机化,地址无关化代码,地址无关可执行

使用方式:"CFLAGS="-fPIC" ./configure

4.PIE

定义:随机化:打开地址随机化,地址无关代码,地址无关执行

使用方式:"CFLAGS="-fPIE" LDFLAGS="-pie" ./configure

5.SP

定义:栈保护

使用方式:CFLAGS="-fstack-protector-strong" ./configure

6.NO Rpath/Runpath

定义:动态库搜索路径(禁选),禁止使用,-rpath

7.FS

定义:Forrtify Source:用FORTIFY_SOURCE编译宏来打开FS选项

使用方式:CFLAGS="-D_FORTIFY_SOURCE=2 -02" ./configure

8.Ftrapv

定义: 整数溢出检查:打开ftrapv选项来检查整数溢出

使用方式:CFLAGS="-ftrapv" ./congfiure

9.Strip

定义:删除符号表:使用-s选项或者strip工具去除符号表

使用方式:LDFLAGS="-s" ./configure

10.安全编译Python

# 安全连接选项:必须通过LDFLAGSS_NODIST带入
# Makefile中的LDFLAGS 或LDFLAGSS_NODIST,都有使用,重复使用不影响
# 如果仅是通过LDFLAGS带入,则Makefile调用setup.py 编译四个模块时,只读取LDFLAGS_NODIST选项LDFLAGS_NODIST="-Wl,-z,relro,-z,now,-WL,-z,noexecstack -s -fvusibility=hideen -WL ,--build-id=none export LDFLAGS_NODIST"# LINKFORSHARED是链接python的bin文件,专用的选项,不同的OS取值不同,它需要通过执行 ./configure,读取Makefile中的LINKFORSHARED获得,以某个OS为例,它的值是"-Xlinker -export-dynamic"# pie安全编译选项,如果通过LDFLAGS或者LDFLAGS_NODIST 带进去都会编译so库时,导致编译so错误,所以,pie只能加到bin/python的专用选项上export LINKFORSHARED="-XLinker -export-dynamic -pie"
export CFLAGS="-D_FORTIFY_SOURCE=2 -02 -fstack-protector -fPIC,-ftrapv -fstack-check -Wfloat-equal -Wformat=2 -Wshadow -Wpointer-arith -Wcast-qual -Wmissing-prototypes -Wstrict-overflow=1 Wstrict-prototypes -Wl, --build-id=none -l libffi/ include -lopenssl/include -lopenssl/include -lopenssl/include/openssl -lzlib/include"
export CFLAGS
export CPPFLAGS="${CFLAGS}"
export CXXFLAGS="${CFLAGS}"
export LD_LIBRARY_PATH="libffi/lib64:openssl/lib64:zlib/lib:${LD_LIBRARY_PATH}"
./configure --prefix=${PYTHON_HOME} --with-openssl=/openssl && make -j8 && make install

http://www.ppmy.cn/ops/150279.html

相关文章

Chatper 4: Implementing a GPT model from Scratch To Generate Text

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture4.2 Normalizing activations with layer normalization4.3 Implementing a feed forward network with GELU activations4.4 Adding shortcut connections4.5 Connecting at…

快速、简单的2D-6D位姿估计:Gen6D算法复现 (pytorch 1.12.1 + cu113)

​ 摘要 记录一下复现Gen6D的过程,主要记录其中遇到的一些bug,主要参考了博主牙牙要健康、Fate-Sky-CSDN博客这两位博主的博客。 参考文章: 【6D位姿估计】【深度学习】windows10下Gen6D代码Pytorch实现 6D姿态估计网络【Gen6D复现】CUDA…

3D可视化产品定制,应用于哪些行业领域?

3D可视化定制服务已广泛渗透至众多行业领域,包括汽车、家居、时尚鞋服、珠宝配饰以及数码电器等: 汽车行业: 借助Web全景技术与3D模型,我们高保真地再现了汽车外观,为用户带来沉浸式的车型浏览体验。用户可在展示界面自…

C# 25Dpoint

C# 25Dpoint ,做一个备份 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace _25Dpoint {public partial cl…

20.2、主流数据库安全分析与防护

目录 Oracle数据库安全分析与防护Oracle安全最佳实践MS SQL数据库安全分析与防护MS SQL Server安全最佳实践MySQL数据库安全分析与防护MySQL安全最佳实践国产数据库的安全分析与防护 Oracle数据库安全分析与防护 数据库oracle是数据库领域的老大,它的安全机制很多&a…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

关于在 Kotlin DSL 中,ndk 的配置方式

在 Kotlin DSL 中,ndk 的配置方式有所不同,取决于 Android Gradle 插件版本。ndk { abiFilters(…) } 在 Kotlin DSL 中实际上是 externalNativeBuild 的一部分,需要通过正确的上下文调用。 错误代码: ndk {abiFilters("ar…

【动态规划-矩阵】5.下降路径最小和

题目 难度: 中等 题目内容: 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选…