博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核内存读写属性更改的问题
阅读量:2344 次
发布时间:2019-05-10

本文共 395 字,大约阅读时间需要 1 分钟。

在arm体系下,内核在较早版本的读写限制没有开启,至少在4.4版本之前。但是在4.19之后的内核,默认开启。

这里有个set_mem_rw(unsigned long ,int)

在19版本上理论上可以更改内存的读写属性,但是采取

set_mem_rw = (void *)kallsyms_lookup_name("set_memory_rw");

进行导出引用,发现根本不管用。我还以为这里内核写的有错误。

在这里插入图片描述

这里这个chang_memory_common是内核中的set_mem_rw的主要实现。

我们看到红色框里面的flag & VM_ALLOC 标志如果不属于这个,那么就直接退出。

在这里插入图片描述
据此,我们导出内存属性中的flagz并做了更改,如黄色框图显示。
再次调用导出set_mem_rw,发现内存成功试下更改。

可见,这个内核函数在做属性更改的同时做了标志检查,但是还是存在绕过的可能。

转载地址:http://unjvb.baihongyu.com/

你可能感兴趣的文章
c++多线程同步(1)
查看>>
Windows 下 C/C++ 多线程编程入门参考范例
查看>>
浅析stack around the variable was corrupted
查看>>
RGB与YUV转换
查看>>
YUV转RGB的相关函数
查看>>
ES(Elasticsearch)排序与相关性
查看>>
ES(Elasticsearch)分片内部原理
查看>>
Java IO(概述)
查看>>
Java IO(文件、管道、字节和字符数组)
查看>>
Java IO(流、Reader And Writer、异常处理)
查看>>
Java IO(RandomAccessFile、File、PipedInputStream、PipedOutputStream)
查看>>
Java NIO(二) Channel
查看>>
Java NIO(三) Buffer
查看>>
Java NIO(五) Selector
查看>>
Java NIO(六)SocketChannel、ServerSocketChannel
查看>>
6 Netty 架构剖析
查看>>
Netty简介
查看>>
Redis,API的理解和使用-全局命令
查看>>
shell之eval
查看>>
postgresql基本操作
查看>>