freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Linux系统安全:Linux内存管理的探究(一)
2020-07-14 12:23:57

程序的地址空间

程序地址空间布局

对于Linux中每一个进程来说,它可以访问的地址空间都是0-4G。其中0-3G是用户空间,3-4G是内核空间。虽然0-4G的地址空间对用户程序来说是可见的,但是通常只有0-3G的地址空间对其来说是可用的,3-4G的内核地址空间是不能被其直接访问的。下图是进程地址空间示意图:

Linux内核地址空间

那么,进程如何才能访问到3-4G地址空间的数据楠,系统提供了一个机制——系统调用。

系统调用

1. 简介

系统调用就是内核提供用户空间来访问内核空间数据的接口。这些接口就是一系列函数。下图为系统调用示意图:

系统调用示意图

对于C语言来说,其提供的函数有些是在系统层,有些是在用户层的系统调用,有些是在用户层的库函数。

比如malloc就是库函数,在用户空间可以使用,mmap是在用户层的系统调用,其可以在用户层调用,但调用后会陷入内核,使用内核空间的资源。有些是在内核层,如kmalloc,是在用户层不能调用的函数。下图展示了C语言内存管理函数间的层次关系:

Linux系统中函数分层示意图系统调用函数可以使用内核地址空间(内核资源),但是它也有坏处,就是会从用户态切换到内核态会额外消耗资源,如果频繁的调用系统函数,会大大降低程序运行的效率。

2. 验证

在Linux操作系统中,可以使用man命令来查看一个函数属于哪个层。

man malloc

man mallocmalloc(3):其中3代表的就是C库函数。

man mmap

man mmap mmap(2)代表的是系统调用函数。

man kmalloc

man kmalloc因为Linux内核没有直接提供内核函数手册,所以该命令没有显示相关信息,但是我们可以创建。

# 系统安全 # 系统安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者