GCC安全编译选项

embedded/2025/1/13 9:25:36/

文章目录

  • 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/embedded/153515.html

相关文章

Golang笔记——rune和byte

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang中的两种字符类型rune和byte,介绍他们的区别,编码方式和简单的使用。 文章目录 byte 类型rune 类型UTF-8 与 Unico…

2024最新版Node.js下载安装保姆级教程【图文详解】

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript。它以非阻塞、事件驱动的架构处理高并发,适用于构建高效的网络应用。在 APP 自动化测试中,Node.js 常用于构建测试框架(如 WebD…

开源临床试验软件OpenClinica的安装

本文是为帮网友 A萤火虫 解决安装问题做的记录; 简介 什么是 OpenClinica ? OpenClinica 是世界上第一个商业开源临床试验软件,主要用于电子数据捕获(EDC)和临床数据管理(CDM)。它的设计旨在优…

【简博士统计学习方法】第2章:3. 感知机——学习算法之原始形式:算法解说

3. 感知机——学习算法之原始形式:算法解说 3.1 学习问题 给定训练数据集: T { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ , ( x N , y N ) } T\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right) \cdots,\left(x_{N}, y_{N}\right)\right\} T{(x…

LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型,包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型,支持…

玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…

Babylon第二阶段测试网发布

我们很高兴地宣布将于 2025 年 1 月 8 日星期三启动Babylon第二阶段测试网 (bbn-test-5)。 原文链接https://babylonlabs.io/blog/babylon-phase-2-testnet-launch 重要日期和时间 区块生产:于 2025 年 1 月 8 日 UTC 时间上午 9 点开始。一旦区块生产开始&#xf…

软件测试的未来:如何跨越自动化到自主测试的鸿沟

近年来,随着人工智能(AI)的飞速发展,软件测试领域迎来了技术变革。从传统的手工测试到自动化测试,再到如今炙手可热的自主测试,测试技术正以前所未有的速度演进。然而,从自动化测试到自主测试&a…