
Linux Kernel
文章平均质量分 91
Omni-Space
专注Android, Mobile Security and AI
展开
-
Android init.rc分析
1 前言什么是init.rc文件?import /init.usb.rcimport /init.${ro.hardware}.rcimport /init.trace.rcon early-init # Set init and its forked children's oom_adj. write /proc/1/oom_adj -16 # Set the security context for the init process. # This s转载 2021-05-02 23:44:19 · 625 阅读 · 0 评论 -
Android 启动分析 1
1.概述Android虽然被称作一种操作系统,其实它仍然使用的Linux的kernel。所以本质上可以说,Android是一个适用于移动设备的Linux发行版。也就是说,之前的分析Linux内核的经验可以拿来用于分析Android。不过,值得注意的是,Android除去对Linux内核的一些改动外,它的大部分代码还是在Linux内核启动后的用户空间程序上。所以,分析Android代码时,不仅要对Linux内核代码熟悉,还要对熟悉Linux系统编程要用到的函数,比如fcntl、mmap、open、read转载 2021-05-02 23:42:48 · 493 阅读 · 0 评论 -
Linux Container 研究报告
1. 综述lxc是Linux Container的用户态工具包。其代码由三部分组成:shell脚本,部分lxc命令是用shell脚本写就的。 c语言代码,最终编译成可执行文件。这部分代码也用来提供最终的lxc命令。但是这些代码以处理命令行参数,读取配置文件等为主。 c语言代码,最终编译为动态链接库liblxc.so。该动态库提供了lxc项目的大部分功能,如配置文件分析、日志记录、容器的创建、通信等。lxc命令的各项功能基本都是通过调用liblxc.so中的函数来完成的。在命名习惯上, 生成lx转载 2021-05-02 23:40:50 · 448 阅读 · 0 评论 -
Cgroup 研究报告
Control Groups (Cgroups) 是 Red Hat Enterprise Linux 6 (以后简称 RHEL6) 提供的一项内核功能。Cgroup是将任意进程进行分组化管理的内核功能。Cgroup提供了一个cgroup虚拟文件系统,作为进行分组管理和各子系统设置的用户接口。因此,要使用cgroup,必须先挂载cgroup文件系统:mount -t cgroup -o 子系统名 层级名(目录名) /sys/fs/cgroup/层级名(目录名)我们可以使用 Cgroups 为任转载 2021-05-02 23:26:28 · 517 阅读 · 0 评论 -
mmap原理及流程(kernel 4.1版本)
背景最近在分析问题时,遇到了mmap fb设备失败问题,顺便看了下4.1版本内核中的mmap相关流程,以前看过老版本的,有些忘记了,这里权当记录,供后续参考。mmap是什么?相信做过Linux开发的兄弟都或多或少用过,或者听说过mmap,但可能并不完全了解mmap的作用。mmap字面上是内存映射的意思,听起来比较抽象,其用法有很多,但总结起来,主要是如下两个用途:将文件转载 2017-08-26 13:14:47 · 3065 阅读 · 2 评论 -
闲聊Linux内存管理(1)
今天还有时间,之前一直想抽时间来写写Linux内核原理相关的东西,关注点不在代码,而在于内在的原理和机制,让大家对Linux内核有个总体的感性认识,个人认为这很有必要,把看似复杂、深不可测的内核实现,用大家都能理解的方式,用讲故事的方式,讲给大家听,如果有人听后,有原来不过如此的感觉,那我的目的就达到了。# 内存管理从哪里开始呢?还是从最基础的内存管理开始吧。内存管理是Li转载 2017-08-26 13:12:10 · 484 阅读 · 0 评论 -
Mips TLB miss实现in Linux
TLB miss是Mips中内存管理的核心流程。上一篇写了关于Mips中,TLB miss的相关原理,本文关注在Linux kernel中的代码实现。TLB Refill初始化内核启动过程中,会对TLB Refill异常进行初始化,设置相应的处理接口。主要流程如下(以R3k为例):start_secondary per_cpu_trap_init tlb_ini转载 2017-08-26 13:10:24 · 1142 阅读 · 0 评论 -
Mips TLB miss异常
最近分析龙芯KVM的实现,顺便又粗看了遍MIPS的手册,跟KVM相关的主要模块包括:CPU虚拟化内存虚拟化IO虚拟化目前龙芯上CPU虚拟化跟标准内核差异不大,需要软硬件配合支持,目前龙芯整体能支持。 内核虚拟化是龙芯KVM方案的关键,直接决定了性能,这也是本文的源头。 IO虚拟化,目前龙芯由于没有自己的桥片,很难做什么,主要基于KVM中现有的virtio(半虚拟化),这里也不关注。转载 2017-08-26 13:09:19 · 3789 阅读 · 0 评论 -
内核中的page fault & copy_from_user
内核态的page fault?前段时间有同事问了个问题:内核中是否可能发生page fault?一时没能给出准确答案,当即有种感觉:难道是对内核内存管理的理解还不够,之前在这方面还是比较自信的~问题看似很简单,从之前的理解来看,以经典的32位X86为例,内核态低端地址都是线性映射的,页表都是事先(内核初始化时)创建好的,对于这段地址,应该不会发生page fault;但对于转载 2017-08-26 13:08:03 · 1697 阅读 · 0 评论 -
Mips KVM Trap&Emulate implemented in Linux
基本原理Trap&Emulate,即陷入&模拟的方式,是纯软件实现的全虚拟化方案,基本不借助硬件虚拟化功能。本文主要关注内存虚拟化实现中的核心,TLB miss相关实现。基本原理是:所有的TLB miss都将导致Guest退出到VMM处理,然后在VMM中进行相应模拟。具体实现原理描述如下:当前内核版本(4.9)的实现方式定义了2中TLB:Guest TLB。由Gue转载 2017-08-26 13:06:45 · 874 阅读 · 0 评论 -
Tramp data In Kernel
表象内核中经常见到某些函数有很多的参数,而且这些参数会一级一级往下面传递,部分参数可能只有最深一级函数才会用到,但却被传递了很多级,其中不乏一些bool型的参数,比如如下的代码流程,6个参数传递了很多级。kvm_mips_map_page() -> gfn_to_pfn_prot() -> __gfn_to_pfn_memslot() ->hva_to_pfn() -> hva_t转载 2017-08-26 13:04:16 · 538 阅读 · 0 评论 -
如何通过数据包套接字攻击Linux内核
一、前言最近我花了一些时间使用syzkaller工具对Linux内核中与网络有关的接口进行了模糊测试(fuzz)。除了最近发现的DCCP套接字漏洞之外,我还发现了另一个漏洞,该漏洞位于数据包套接字(packet sockets)中。在这篇文章中,我会向大家介绍这个漏洞的发现过程,以及我们如何利用这个漏洞来提升权限。该漏洞本身(CVE-2017-7308)是一个符号类型漏转载 2017-08-11 13:41:42 · 2621 阅读 · 0 评论 -
Core Dump流程分析
闲话最近分析问题时,发现我的环境中,经常有用户态进程异常退出,但是却没有core文件生成,简单看了一下相关的内核流程,mark一下。Core Dump基本原理当应用程序在用户态发生异常时,比如常见的段错误,通常会生成core文件,通过gdb分析core文件,基本就能定位问题。core文件实际是当前进程地址空间的一个镜像文件,其中包含了该进程在内存中的所有信息。转载 2017-08-26 13:17:42 · 2482 阅读 · 0 评论 -
CVE-2016-10229分析
漏洞描述Linux kernel是美国Linux基金会发布的操作系统Linux所使用的内核。Linux kernel 4.5之前的版本中的udp.c文件存在安全漏洞,Linux内核中的udp.c允许远程攻击者通过UDP流量执行任意代码,这些流量会在执行具有MSG_PEEK标志的recv系统调用时触发不安全的第二次校验和计算,远程攻击者可精心构造数据执行任意代码,进一步导致本地提权,属于高危漏洞转载 2018-01-21 13:26:33 · 1253 阅读 · 1 评论 -
Learn About Windows Console & Windows Subsystem For Linux (WSL)
Windows Subsystem for Linux (WSL) has made a lot of waves since it was announced at //Build 2016 in April 2016. But as with any new technology, many people have questions including:How doesBash on ...转载 2019-05-08 04:21:46 · 273 阅读 · 0 评论 -
【译】Writing a Simple Linux Kernel Module
掌握 Golden Ring-0Linux为应用程序提供了强大而广泛的API,但有时这还不够。 与一块硬件交互或执行需要访问系统中特权信息的操作需要内核模块。Linux内核模块是一段编译的二进制代码,直接插入到Linux内核中,运行在x86-64处理器中最低且受保护程度最低的环0。 此处的代码完全未经检查,但以令人难以置信的速度运行,并且可以访问系统中的所有内容。不仅仅是凡人编写L...翻译 2018-09-05 14:41:33 · 405 阅读 · 0 评论 -
(整理)用户空间_内核空间以及内存映射
内核空间和用户空间 现代操作系统采用虚拟存储器,对于32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的权限。为了保证用户进程不能直接操作内核,保证内核安全,操作系统将虚拟空间划分为两部分,一部分是内核空间,一部分是用户空间。针对Linux操作系统,将最高的1G字节(从虚拟地址0xC0...转载 2018-04-25 13:09:58 · 7185 阅读 · 0 评论 -
资源隔离之 Linux namespace
Linux namespace 简称 ns,在 2002 年 2.4.19 内核中被引入,发展到今天已经有 15 个年头了。2010 年后国内云计算爆发,紧接着 2013 年 Docker 崛起,ns 才作为不可或缺的一部分被重视起来。ns 本身其实比较简单,它是 Linux 内核的一种机制,给进程隔离和虚拟化内核资源用的。不同的进程是共享内核资源的。好比说大家住在同一个小区,虽然到家后关起门来谁...转载 2018-04-01 15:55:23 · 5513 阅读 · 0 评论 -
How to Use Performance Monitor Unit(PMU) of 64-bit ARMv8-A in Linux
Performance Monitor is an optional feature in ARMv8-A architecture. Performance Monitor in ARMv8-A includes a 64-bit cycle counter, a number of 32-bit event counters and control component.From program...转载 2018-03-11 16:04:00 · 2628 阅读 · 0 评论 -
Get Cache Info in Linux on ARMv8 64-bit Platform
On x86 platform, there are many ways to get cache information from a running Linux system. For example, by checking /proc/cpuinfo, or by using tools, like dmidecode, lshw, hwloc, etc. But don’t forget...转载 2018-03-11 16:00:59 · 694 阅读 · 0 评论 -
深入理解Linux内存管理--目录导航
日期内核版本架构作者GitHubCSDN2016-08-31Linux-4.7X86 & armgatiemeLinuxDeviceDriversLinux内存管理1 内存描述CSDNGitHubLinux内存描述之概述–Linux内存管理(一)01-description/转载 2018-01-26 08:32:41 · 556 阅读 · 0 评论 -
GDB 调试多进程或者多线程应用
GDB 是 linux 系统上常用的 c/c++ 调试工具, 功能十分强大. 对于较为复杂的系统, 比如多进程系统, 如何使用GDB 调试呢?考虑下面这个三进程系统 :进程 ProcessChild 是 ProcessParent 的子进程,ProcessParentThread 又是 ProcParent 的子线程. 如何使用 GDB 调试 子进程ProcessChild 或转载 2018-01-26 08:30:20 · 1080 阅读 · 0 评论 -
Linux内存初始化(C语言部分)
这篇博客接着上篇博客,继续介绍Linux内核启动过程中内存的初始化过程。相比于汇编代码,分析C代码有一个优势,因为在之前的汇编代码中已经开启了分页模式,所以可以通过一些symbol直接在某些函数上设置断点,然后通过gdb进行调试。如何用gdb调试内核可以参考这篇博客。进入x86_64_start_kernel之前我们讲到,在secondary_startup_64最后,我们转载 2017-03-11 13:44:21 · 1127 阅读 · 0 评论 -
Linux内存初始化(汇编部分)
之前有几篇博客详细介绍了Xen的内存初始化,确实感觉这部分内容蛮复杂的。这两天在看Linux内核启动中内存的初始化,也是看的云里雾里的,想尝试下边看边写,在写博客的过程中慢慢思考,最后也能把自己的思考分享给其它人。这个系列主要分为两个部分,汇编部分和C语言部分。这篇博文主要介绍的是汇编部分。注:这两篇博文介绍的都是64位系统。内核解压缩过程这个过程就不详述了转载 2017-03-11 13:43:22 · 1692 阅读 · 0 评论 -
Linux kernel 3.10内核源码分析--进程上下文切换
一、疑问进程调度时,当被选中的next进程不是current进程时,需要进行上下文切换。进行上下文切换时,有一些问题不太容易理解,比如:1、进程上下文切换必然发生在内核态吗?2、上下文切换后原来的进程(prev)如果恢复执行,从什么地方开始执行?3、上下文切换后,如何切换到新进程执行?新进程从什么地方开始执行?5、上下文切换时,堆栈如何切换,如果保证不混乱?6、A进程执转载 2016-04-01 17:54:15 · 1138 阅读 · 0 评论 -
Java Programming Tutorial Java Native Interface (JNI)
1. IntroductionAt times, it is necessary to use native codes (C/C++) to overcome the memory management and performance constraints in Java. Java supports native codes via the Java Native Interface转载 2016-03-09 06:24:06 · 957 阅读 · 0 评论 -
Linux 解压后的启动流程分析
原文地址: http://blog.chinaunix.net/uid-26833883-id-4520876.html转载 2016-03-09 06:15:49 · 393 阅读 · 0 评论 -
Linux 内核自解压流程分析
原文地址: http://blog.chinaunix.net/uid-26833883-id-4520866.html转载 2016-03-09 06:13:32 · 516 阅读 · 0 评论 -
linux 进程地址空间的一步步探究
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢?呵呵,这一切的一切都是个迷呀,下面我们就一步一步转载 2016-03-09 06:03:03 · 353 阅读 · 0 评论 -
linux 标准IO缓冲机制探究
一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.转载 2016-03-09 03:49:38 · 383 阅读 · 0 评论 -
linux 进程(一)---基本概念
一、进程的定义 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。二、进程与程序的区别 程序时静态的,它是一些保存 在磁盘上得指令的有序集合,没有任何执行的概念。 进程是一个动态的概念,它是程序执行的过程,包括创建、调度和消转载 2016-03-09 02:34:12 · 424 阅读 · 0 评论 -
Linux系统中,read文件过程分析
read一个文件首先是通过系统调用open一个文件大家好,我是ChinaUnix的T-bagwell然后通过系统调用去read一个文件,为什么man 2 read的时候或者man 2 write的时候的参数与写的驱动的read和write里面定义的函数看上去不同呢?ssize_t read(int fd, void *buf, size_t count);转载 2016-03-09 02:32:15 · 660 阅读 · 0 评论 -
内核 kmap_atomic分析
1、为什么会有这个函数?我想主要的原因就是kmap_atomic在效率上要比kmap提升不少。在kmap函数中,会有如下几个比较耗时的部分:1)、page_address函数2)、Sleep for somebody else to unmap their entries代码如下:171 ____________DECLARE_WAITQUEUE(wait, c转载 2016-03-09 02:29:23 · 1451 阅读 · 0 评论 -
Linux内核中无名管道pipe和有名管道fifo的分析
1、管道(pipe)管道是进程间通信的主要手段之一。一个管道实际上就是个只存在于内存中的文件,对这个文件的操作要通过两个已经打开文件进行,它们分别代表管道的两端。管道是一种特殊的文件,它不属于某一种文件系统,而是一种独立的文件系统,有其自己的数据结构。根据管道的适用范围将其分为:无名管道和命名管道。● 无名管道主要用于父进程与子进程之间,或者两个兄弟进程之间。在lin转载 2016-03-20 13:07:34 · 2291 阅读 · 0 评论 -
kernel 3.10内核源码分析--内核栈及堆栈切换
1、概念Linux中有3种栈:1)用户栈。当进程处于用户态时使用,位于进程地址空间(用户态部分(如:0-0xc0000000))底部,用户态分配局部变量和函数调用时时,使用该栈,跟平时我们见到和理解的一样,就是虚拟地址空间中的一段。2)内核栈。跟用户栈独立,属于进程,即每个进程都有自己的内核栈,单独分配,大小为8k,跟thread_info结构放在一起,在用户态和内核态切换时,需要进行转载 2016-04-01 17:57:08 · 2235 阅读 · 0 评论 -
Linux kernel 3.10内核源码分析--TLB相关--TLB概念、flush、TLB lazy模式
一、概念及基本原理TLB即Translation Lookaside Buffer,是MMU中的一种硬件cache,用于缓存页表,即缓存线性地址(虚拟地址)到物理地址的映射关系。如果没有TLB,那么正常的内存数据访问前需要先通过线性地址查进程页表将其转换为物理地址,页表实际也是放在物理内存中的,页表分级存放,一次地址转换需要经过多次内存访问,效率不高,尤其是类似的操作非常频繁,由此带来的性转载 2016-04-01 17:59:27 · 1616 阅读 · 0 评论 -
Linux Used内存到底哪里去了?
原创文章,转载请注明: 转载自系统技术非业余研究本文链接地址: Linux Used内存到底哪里去了?前几天 纯上 同学问了一个问题:我ps aux看到的RSS内存只有不到30M,但是free看到内存却已经使用了7,8G了,已经开始swap了,请问ps aux的实际物理内存统计是不是漏了哪些内存没算?我有什么办法确定free中used的内存都去哪儿了呢?这个问题不止一个转载 2017-02-18 03:47:55 · 1160 阅读 · 0 评论 -
ARM64的启动过程之(五):UEFI
原文地址: http://www.wowotech.net/linux_kenrel/UEFI.html一、前言在准备大刀阔斧进入start_kernel之际,我又重新review了一下head.S文件,看看是否有一些遗漏的知识点,很不幸,看到了CONFIG_EFI这个配置项。当然,在一年前阅读kernel代码的时候就了解过相关的内容,但是,做为一个嵌入式工程师总是或多或少对其有些排斥转载 2016-02-26 07:53:12 · 5469 阅读 · 0 评论 -
ARM64的启动过程之(四):打开MMU
原文地址:http://www.wowotech.net/linux_kenrel/turn-on-mmu.html一、前言经过漫长的前戏,我们终于迎来了打开MMU的时刻,本文主要描述打开MMU以及跳转到start_kernel之前的代码逻辑。这一节完成之后,我们就会离开痛苦的汇编,进入人民群众喜闻乐见的c代码了。二、打开MMU前后的概述对CPU以及其执行的程序而言,打转载 2016-02-26 07:52:03 · 2426 阅读 · 0 评论 -
ARM64的启动过程之(三):为打开MMU而进行的CPU初始化
原文地址:http://www.wowotech.net/linux_kenrel/__cpu_setup.html一、前言上一节主要描述了为了打开MMU而进行的Translation table的建立,本文延续之前的话题,主要是进行CPU的初始化(注:该初始化仅仅为是为了turn on MMU)。本文主要分析ARM64初始化过程中的__cpu_setup函数,代码位于arch/a转载 2016-02-26 07:51:07 · 2833 阅读 · 0 评论