Linux奇技淫巧之-使用setarch 禁止地址空间随机化

先来看这样一个代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main() {int *p = (int*)malloc(sizeof(int));*p = 0;while(1){printf("[%d]addr: %p, value: %d\n", getpid(), p, *p);*p = *p + 1;sleep(1);}return 0;
}

代码很简单,在堆上分配一个int大小的内存空间,先将这个内存空间清零,然后在一个死循环中打印进程id,该内存空间的地址,以及该内存空间保存的数据,然后将其中的数字加1,睡眠1秒钟,如此循环往复。

我们将其编译成可执行文件,并命名为addr_randomize

gcc -o addr_randomize addr_randomize.c

如果我们在命令行同时运行这个程序的两个实例,看看会发生什么:

[-bash-4.2  $]./addr_randomize & ./addr_randomize &
[1] 2139
[2] 2140
[-bash-4.2 $]
[2139]addr: 0x912010, value: 0
[2140]addr: 0xda2010, value: 0
[2139]addr: 0x912010, value: 1
[2140]addr: 0xda2010, value: 1
[2139]addr: 0x912010, value: 2
[2140]addr: 0xda2010, value: 2
[2140]addr: 0xda2010, value: 3
[2139]addr: 0x912010, value: 3
[2140]addr: 0xda2010, value: 4

可以看到启动了两个进程,一个pid为2139,另一个为2140.这里我们关注这个指针p所指向的地址,2139进程,p指向0x912010,2140进程,p指向0xda2010。

同一个可执行文件,每次执行时分配给p的内存地址是随机的,这是Linux内核的一种叫做Linux内核地址空间布局随机化(ASLR)的特性。目的是增大黑客预测某一个函数或者某一个数据结构的难度。

Linux kernel's Address Space Layout Randomization (ASLR). ASLR is a security feature that randomizes the memory addresses used by system processes, making it harder for attackers to predict the locations of specific functions or data structures.

那如果想禁用这个特性,应该怎么做呢?

使用setarch命令

setarch $(uname -m) --addr-no-randomize your_program_name

其中uname -m 返回你的机器的架构,在我的机器上,它返回x86_64,addr-no-randomize选项可以禁用某一个可执行文件的ASLR。

[-bash-4.2 $]setarch $(uname -m) --addr-no-randomize ./addr_randomize & setarch $(uname -m) --addr-no-randomize ./addr_randomize &
[1] 3146
[2] 3147
[-bash-4.2 $]
[3146]addr: 0x602010, value: 0
[3147]addr: 0x602010, value: 0
[3146]addr: 0x602010, value: 1
[3147]addr: 0x602010, value: 1
[3146]addr: 0x602010, value: 2
[3147]addr: 0x602010, value: 2
[3146]addr: 0x602010, value: 3
[3147]addr: 0x602010, value: 3

可以看到,在禁用了ASLR之后,进程3146和进程3147中p指向的地址都是0x602010。

虽然这两个进程中p都指向0x602010, 并不意味着两个进程中的p真的指向同一个物理内存地址。因为0x602010是逻辑地址,还要经过地址单元的翻译,才会映射到最终的物理地址。

上述命令只对某一个进程起作用。如果要对所有进程都禁用ASLR,可以修改这个参数:kernel.randomize_va_space

sudo sysctl -w kernel.randomize_va_space=0

当系统重启后,这个参数会恢复默认值1

如果要保持重启后依然有效,需要将其写入配置文件/etc/sysctl.conf

kernel.randomize_va_space = 0

编辑完 /etc/sysctl.conf 后,执行下面的命令使更改生效:

sudo sysctl -p

需要注意的事,正如前面所说,修改这个参数会降低系统的安全系数,最好不要去改,除非有特殊的需要并且你很清楚这么做的后果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猫头虎分享已解决Bug || ValueError: Data cardinality is ambiguous ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

gem5学习(25):用于异构SoC的片上网络模型——Garnet2.0

目录 一、Invocation 二、Configuration 三、Topology 四、Routing 五、Flow Control 六、Router Microarchitecture 七、Buffer Management 八、Lifecycle of a Network Traversal 九、Running Garnet2.0 with Synthetic Traffic 官网教程&#xff1a;gem5: Garnet 2…

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频&#xff0c;说到&#xff1a;当程序正在运算时&#xff0c;会有一个较长时间的空白期&#xff0c;谁也不知道程序运行的进度如何&#xff0c;不如给他加个进度条。 于是我今个就搜寻一下&#xff0c;Python版的进度条都可以怎么写&#xff01; 送书…

多线程和并发

线程 进程&#xff1a;在操作系统中运行的程序&#xff0c;一个进程可以包含多个线程 程序就是指令和数据的有序集合&#xff0c;静态概念 进程就是执行程序的一次执行过程&#xff0c;动态概念系统资源分配的单元 一个进程中包含多个线程&#xff0c;一个进程至少包含一个线…

大蟒蛇(Python)笔记(总结,摘要,概括)——第9章 类

目录 9.1 创建和使用类 9.1.1 创建Dog类 9.1.2 根据类创建实例 9.2 使用类和实例 9.2.1 Car类 9.2.2 给属性指定默认值 9.2.3 修改属性的值 9.3 继承 9.3.1 子类的_init_()方法 9.3.2 给子类定义属性和方法 9.3.3 重写父类中的方法 9.3.4 将实例用作属性 9.3.5 模拟实物 9.…

现货黄金中短线投资该怎么做?

要明确什么是现货黄金的中短线投资&#xff0c;中短线投资是指在短期内&#xff08;一般为几天至几周&#xff09;对现货黄金进行买卖操作&#xff0c;以期获得收益的投资方式。相较于长线投资&#xff0c;中短线投资的风险相对较大&#xff0c;但同时收益也更为可观。那么&…

深入探究 JVM 频繁 Full GC 的排查过程

1. 引言 在当今软件开发领域&#xff0c;Java语言以其跨平台性、面向对象、高性能等特点成为了广泛应用的首选之一。而Java应用程序的核心执行环境就是Java虚拟机&#xff08;JVM&#xff09;&#xff0c;它负责将Java字节码翻译成机器码并执行&#xff0c;是Java程序运行的基…

二手货wordpress企业网站主题模板

二手车wordpress主题模板 简洁的二手车wordpress主题模板&#xff0c;适合做二手车业务的公司官方网站使用。 https://www.jianzhanpress.com/?p3473 wordpress二手物资回收主题 绿色wordpress二手物资回收主题&#xff0c;用于二手物资回收公司WP建站使用。 https://www.…

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件&#xff0c;由德人合科技提供。该软件采用动态加解密技术&#xff0c;能够有效防止公司内部数据泄密&#xff0c;同时支持各种文件格式加密&#xff0c;如CAD、OFFICE、PDF、图纸等。 PC端&#xff1a;https://isite.baidu.com/sit…

git如何保留提交记录的情况下迁移

Git仓库迁移方案 在日常的工作场景中&#xff0c;我们有时候会遇到需要更换Git仓库地址的需求。或者是从一个git仓库托管工具换到另一个git仓库托管工具。这个时候有两种方案&#xff1a; 方案一&#xff1a;不保留历史提交记录 如果你不需要保留原有的历史提交记录&#xf…

Linux RocketMQ 安装及卸载(附控制台搭建)

一、前言 在安装 RocketMQ 前需要确保 JDK 已安装并正确配置环境变量 二、下载安装 1.下载 下载 | RocketMQ 2.安装 # 打开存放目录 cd /usr/local # 创建目录 mkdir rocketMQ # 进入目录 cd rocketMQ # 把下载的压缩包上传到 rocketMQ 目录中 # 解压 $ unzip rocketmq-all-…

备战蓝桥杯 Day12(二维费用背包+分组背包)

二进制分解多重背包 269&#xff1a;【例9.13】庆功会 【题目描述】 为了庆贺班级在校运动会上取得全校第一名成绩&#xff0c;班主任决定开一场庆功会&#xff0c;为此拨款购买奖品犒劳运动员。期望拨款金额能购买最大价值的奖品&#xff0c;可以补充他们的精力和体力。 #inc…

高级RAG:揭秘PDF解析

原文地址&#xff1a;https://pub.towardsai.net/advanced-rag-02-unveiling-pdf-parsing-b84ae866344e 2024 年 2 月 3 日 附加内容&#xff1a;揭秘PDF解析&#xff1a;如何从科学pdf论文中提取公式 对于RAG&#xff0c;从文档中提取信息是一个不可避免的场景。确保从源头…

Flutter学习6 - Dart 类与对象

1、面向对象编程&#xff08;Object-Oriented Programming, OOP&#xff09;三大特征 &#xff08;1&#xff09;封装 封装是指将对象的状态&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;封装在一起&#xff0c;对外部隐藏对象的内部细节&#xff0c;只提…

#LLM入门|Prompt#1.1 第一部分_面向开发者的LLM入门教程_简介

Prompt工程&#xff1a;解锁大语言模型潜能的关键技巧 随着大语言模型&#xff08;LLM&#xff09;的兴起&#xff0c;Prompt工程已成为开发者利用LLM构建功能强大应用的关键技能。在这个新时代&#xff0c;Prompt不仅是指导LLM的输入形式&#xff0c;更是塑造其能力上限与下限…

Python 在Word中创建表格并填入数据、图片

在Word中&#xff0c;表格是一个强大的工具&#xff0c;它可以帮助你更好地组织、呈现和分析信息。本文将介绍如何使用Python在Word中创建表格并填入数据、图片&#xff0c;以及设置表格样式等。 Python Word库&#xff1a; 要使用Python在Word中创建或操作表格&#xff0c;需…

OpenCV 4基础篇| OpenCV图像基本操作

目录 1. 图像读取1.1 cv2.imread() 不能读取中文路径和中文名称1.2 cv2.imdecode() 可以读取中文路径和中文名称 2. 图像的显示2.1 openCV显示图像 cv2.imshow()2.2 matplotlib显示图像 plt.imshow() 3. 图像的保存 cv2.imwrite()4. 图像的复制4.1 img.copy()4.2 np.copy()4.3 …

【C++STL】STL容器详解

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

RabbitMQ 网络分区处置策略配置

概述 集群成员之间的网络连接故障会影响客户端操作的数据一致性和可用性&#xff08;如CAP定理&#xff09;。 由于不同的应用程序对一致性有不同的要求 并且可以容忍不同程度的不可用&#xff0c;可以使用不同的分区处理策略。 检测网络分区 节点确定其对等节点是否关闭&am…

个性化纹身设计,Midjourney带你探索独一无二的艺术之美

hello,大家好&#xff0c;欢迎回来。 在当今社会&#xff0c;纹身已经变得非常常见。 在寻求与众不同的个性化纹身时&#xff0c;你是否曾经为了找不到独特的设计而苦恼&#xff1f; 现在&#xff0c;Midjourney将为你打开一扇全新的艺术之门&#xff0c;引领你探索纹身设计…