Linux下 ASLR功能与 -no-pie 选项说明
一. Linux下ASLR功能
1. ASLR 技术介绍
ASLR 技术是一种针对缓冲区溢出的安全保护技术。
ASLR,全称为 Address Space Layout Randomzation,地址空间布局随机化。ASLR 技术在 2005 年的 kernel 2.6.12 中被引入到 Linux 系统,它将进程的某些内存空间地址进行随机化来增大入侵者预测目的地址的难度,从而降低进程被成功入侵的风险。当前 Linux、Windows 等主流操作系统都已经采用该项技术。
ASLR功能等级:Linux系统中ASLR 技术分三个等级。如下:
- 0:没有随机化。即关闭 ASLR。
- 1:保留的随机化。共享库、栈、mmap() 以及 VDSO 将被随机化。
- 2:完全的随机化。在 1 的基础上,通过 brk() 分配的内存空间也将被随机化。
2. ASLR 功能关闭
ASLR 的等级可以通过一个内核参数 randomize_va_space 来进行控制。
可通过命令查看当前系统的 ASLR 等级,操作如下:
cat /proc/sys/kernel/randomize_va_space
系统默认这个功能是开启的。有时候调试代码时,需要更改 ASLR 功能,可通过命令设置。
如果想关闭该功能,则可以输入如下命令即可关闭,注意需要 root 权限,命令如下:
echo 0 > /proc/sys/kernel/randomize_va_space
确认是否成功关闭,可以通过命令查看,Linux 系统下操作如下:
二. Linux编译选项 -no-pie
1. PIE 技术介绍
PIE (position-independent executable) 是一种生成地址无关可执行程序的技术。如果编译器在生成可执行程序的过程中使用了PIE,那么当可执行程序被加载到内存中时其加载地址存在不可预知性。
2. 关闭 PIE 功能
有时需要调试代码,PIE 功能会影响到调试。需要关闭 PIE 功能。我这里系统是 ubuntu 系统。
编译程序需要加入 -no-pie 选项,对代码进行编译。-no-pie 选项是 gcc 编译器的编译选项之一。
关闭 PIE 功能时编译代码命令: gcc -no-pie test.c -o test
经过测试,ubuntu 20.04 默认 gcc 编译程序时是有 PIE 功能的。测试如下:
代码如下:
#include <stdio.h>int g_data = 0;void main()
{printf("g_data address = %x\n", &g_data);
}
当默认进行 gcc 编译时,即只输入 gcc main.c -o main.out 命令。可以看出全局变量的地址每次运行不固定。如下所示:
当关闭 PIE 功能编译程序时,即输入 gcc -no-pie main.c -o main.out 命令进行编译。则每次运行程序时,全局变量的地址固定不变,如下所示:
总结:
当代码中存在内存泄露,使用 mtrace 工具对代码进行排查时,经过测试验证:当在编译代码时加入 -no-pie 选项进行编译后, mtrace 工具才会定位到具体的某一行 C 代码行。
Linux下 ASLR功能与 -no-pie 选项说明相关推荐
- Linux下多功能编辑器,Linux下的编辑器——vi大全
xp 交换两个字符位置 ddp 上下两行调换 J 上下两行合并 dG 删除所有行 d$ 从当前位置删除到行尾 y$ 从当前位置复制到行尾, 如果要粘贴到其他地方 p 就可以了 :ab string s ...
- linux设置web服务器配置,Linux下配置功能完善的Web服务器
调试环境:Redhat9.0Apache1.3.29Mysql3.23.58PHP4.3.4 Linux系统的安装我就不讲了,这是基本功,其实这篇文章在类似Redhat的其他linux也应该通用,大家 ...
- 《Linux指令从入门到精通》——4.2 Linux下的简单文字模式文本编辑器
本节书摘来自异步社区<Linux指令从入门到精通>一书中的第4章,第4.2节,作者:宋磊 , 宋馥莉 , 雷文利著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- linux下ioctl操作网络接口,linux下无线网卡的ioctl 接口
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/ba ...
- Linux下硬盘SMART检查
无论是生产服务器中还是平时使用的家用电脑,在长期的使用中磁盘一定会有损耗所以我们需要对磁盘进行定期检查以确保磁盘的健康与否,是否需要替换.在Windows的系统下大家都知道有很多第三方软件可以实现磁盘 ...
- ubuntu环境下增加-pie选项导致可执行程序无法通过双击启动的问题
在ubuntu环境下,链接可执行文件时增加-pie选项,双击可执行程序,无法正常启动. 对于这个现象,stackoverflow有个帖子,gcc creates mime type applicati ...
- Linux下高性能网络编程中的几个TCP/IP选项
Linux下高性能网络编程中的几个TCP/IP选项 转自:http://blog.chinaunix.net/u/12592/showart.php?id=2064847 最近在新的平台上测试程序,以 ...
- linux下安装win xp 进pe出错,PE安装原版XP系统(含高版本PE安装选项灰色处理办法)...
PE 安装 XP 镜像流程 准备原版 XP 安装光盘镜像放到硬盘非 C 盘. 可解压到本地经行安装, 也可以使用虚拟光驱载入安装 (本教程主要讲 PE 内虚拟光驱载入安装) 第一步:用 U 盘或硬盘/ ...
- Linux 下用来查询安装包信息的RPM选项
Linux 下用来查询安装包信息的RPM选项 RPM是RedHat的包管理器,用来安装.卸载.升级和查询基于RedHat Linux的安装包.RHEL和基于它的系统使用rpm命令来完成这些功能. AD ...
最新文章
- mysql读写分离(MySQL Proxy 安装和使用)
- 谷歌把安全融入主机芯片
- 中交兴路完成7亿元A轮融资,携手蚂蚁金服共建小微物流科技服务生态
- 成功解决ValueError: Could not interpret input day
- xpath元素和css选择器的定位
- Java—实现 IOC 功能的简单 Spring 框架
- 游戏行业应该如何建设数据中台?
- MySQL存储引擎及InnoDB并发控制介绍
- 连续型随机变量量函数的期望
- 梯度边缘检测 matlab,梯度边缘检测matlab
- 【FLEX教程】#007 如何让JS调用SWF里的方法
- 查看mysql服务器位置,查看mysql服务器ip地址
- CCNA考试题库中英文翻译版及答案17
- JAVA输出100以内素数
- 写给应届毕业生-------五险一金以及个人所得税缴纳计算
- android毕业论文结论,毕业论文经典结束语
- NET Reflector 7.6.1.824安装及破解
- 论文详解EnlightenGAN: Deep Light Enhancement Without Paired Supervision
- 五问补盲(三) | 补盲激光雷达,敢不敢直面新的安全威胁?
- C++中加速cin与cout神器
热门文章
- linux 输入、输出重定向的概念和用法详解(Day01)
- css动画无限循环转圈,css3 – 具有无限循环的链CSS动画
- 2022牛客寒假第二场 小沙的身法 (思维,树上两点距离)
- 往事如烟 - 老钟6
- Apollo control模块横向控制原理及核心代码逐行解析
- android app利用微信浏览器,万人在线
- 关于trello的分享
- apache+python+php+mysql集成环境安装包
- 游戏引擎AndEngine总结(十):单帧图片组合成为动画资源
- 学习笔记(21):第一章: 路由与模板-Web前端技术与框架