早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进程访问到这片内存。
所谓的SO注入就是将代码拷贝到目标进程中,并结合函数重定向等其他技术,最终达到监控或改变目标进程行为的目的。Android是基于Linux内核的操作系统,而在Linux下SO注入基本是基于调试API函数ptrace实现的,同样Android的SO注入也是基于ptrace函数,要完成注入还需获取root权限。
前言: procrank是一个统计内存使用的神器,包括VSS,PSS,PSS和USS的详细参数。作为一个内存使用的分析工具,简直厉害的不要不要的。 作者尝试过几个Linux发行版,都没有把procrank作为可以安装的包。这也不奇怪,作者接触这个命令的时候,也是在Android中使用到的。尽管后来不从事嵌入式开发了,每当遇到类似的问题时,都会情不自禁的想到这个神奇的工具。在Iaas平台中,统计KSM也是利器。 源代码: 如上面所说,代码选自Android的源代码。为了使用方便,作者在github上做了一份拷
本篇博客调用 sbrk 系统调用函数 , 申请并修改 堆内存 , 并在 /proc/pid/maps 中查看该进程的 堆内存 ;
这是虚拟内存系列文章的第一篇。 本文通过实验的手段, 带大家了解一些计算机科学相关的基础知识。 在本文,我们将利用/proc查找进程虚拟内存中的ASCII字符串, 然后修改该字符串。 在这一过程中,我们将学到很多有趣的东西。
本文介绍了Linux pstack工具的原理、使用方法以及其在多线程程序调试中的重要作用。pstack通过GDB的thread apply all bt命令,可以打印出所有线程的栈信息,从而帮助开发人员定位多线程程序中的问题。
无名管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲缘关系一般指的是父子关系。无明管道一般用于两个不同进程之间的通信。当一个进程创建了一个管道,并调用fork创建自己的一个子进程后,父进程关闭读管道端,子进程关闭写管道端,这样提供了两个进程之间数据流动的一种方式。
在android源码的驱动目录下,一般会有共享内存的相关实现源码,目录是:kernel\drivers\staging\android\ashmem.c。但是本篇文章不是讲解android共享内存的功能实现原理,而是讲怎么运用它。
在排查网络问题与深入了解网络协议的工作原理的时候,sre最常使用tcpdump。但是实际上tcpdump只能告诉你网络上传输了哪些包,没有体现为什么这么传输,在排查网络丢包问题的时候是存在一定的局限性的。这时候就需要依赖BCC这个工具来深入地排查网络的问题了。(对于tcpdump与bcc的使用后续可以单独介绍)。
进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?首先,进程间通信至少可以通过传送、打开文件来实现,不同的进程通过一个或多个文件来传递信息,事实上,在很多应用系统里都使用了这种方法。但一般说来,进程间通信(Inter Process Communication,IPC)不包括这种似乎比较低级的通信方法。UNIX系统中实现进程间通信的方法很多,而且不幸的是,极少方法能在所有的UNIX系统中进行移植(唯一一种是半双工的管道,这也是最原始的一种通信方式)。而Linux作为一种新兴的操作系统,几乎支持所有的UNIX下常用的进程间通信方法:管道、消息队列、共享内存、信号量、套接字等。其中,前面4种主要用于同一台机器上的进程间通信,而套接字则主要用于不同机器之间的网络通信。
在 Linux 系统中,调用 fork 系统调用创建子进程时,并不会把父进程所有占用的内存页复制一份,而是与父进程共用相同的内存页,而当子进程或者父进程对内存页进行修改时才会进行复制 —— 这就是著名的 写时复制 机制。
ASLR,应为全称为Address Space Layout Randomization,即地址空间布局随机化。它是一种概率性安全防御机制,由PaX团队于2001年正式提出,并在2005年开始引入到Linux内核之中。ASLR能够在每次运行可执行文件的时候通过基地址随机映射的方式来为其随机分配地址空间。ASLR存在的目的,就是为了防止那些需要了解内存地址来利用内存崩溃漏洞的攻击行为。
进程(Process)是计算机中已运行程序的实体。用户下达运行程序的命令后,就会产生进程。每个CPU核心任何时间内仅能运行一项进程。
proc 是一个虚拟文件系统,在Linux 系统中它被挂载于/proc 目录之上。proc 有多个功能 ,这其中包括用户可以通过它访问内核信息或用于排错,这其中一个非常有 用的功能,也是Linux 变得更加特别的功能就是以文本流的形式来访问进程信息。很Linux 命令( 比如 ps 、toPpstree 等) 都需要使用这个文件系统的信息。 maps /proc/[pid]/maps显示进程内存区域映射信息 > cat /proc/1751/maps 00400000-00401000 r-xp 000
在接入日志组件xlog的工作中,对mmap内存映射加深了了解,分享一下学习心得。 1.一个Linux进程的虚拟内存 如图展示了一个Linux进程的虚拟内存。 虚拟的意思是进程以为自己有这么一
最近发布的 Linux 内核带了一个针对内核的能力强大的 Linux 监控框架。它起源于历史上人们所说的的 BPF。
eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具。它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。
Linux下的程序的文件格式是ELF,里面分了各种段,有代码段、数据段、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置。本文整理了用cpp程序读取内存中的代码段和rodata数据段的方法。
作为一名合格的程序猿/媛,对于进程、线程还是有必要了解一点的,本文将从下面几个方向进行梳理,尽量做到知其然并知其所以然:
原本想着使用 pstack 命令监控一下监听日志可没想到,Linux 系统默认没有这个命令。RedHat 公司发行的 Linux 操作系统(RHEL,CentOS等等)虽提供了 pstack 工具,但要安装 gdb。
Android作为移动端操作系统,传统的Linux进程间通信机制不满足于Android,所以开发了一套新的IPC机制,就是Binder机制。
在Linux中,文件加锁是通过使用文件锁(File Locks)来实现的。文件锁主要有两种类型:共享锁(Shared Lock)和排他锁(Exclusive Lock)。这些锁用于控制对文件的并发访问,以防止多个进程同时对同一文件进行读或写操作,从而保护文件的一致性。
学习软件工程规范的时候,我们知道瀑布模型,在整个项目开发过程分为多个阶段,上一阶段的输出作为下一阶段的输入。各个阶段的具体内容如下图所示
这篇文章主要是想尽量直观的介绍虚拟内存的知识,而虚拟内存的知识不管作为在校学生的基础知识,面试的问题以及计算机程序本身性能的优化都有着重要的意义。而起意写这篇文章主要还是因为在python,人工智能的大浪潮下,我发现好多人对这方面真的无限趋近于不知道。我不是说懂这些基础知识比懂人工智能水平就是高,但是作为一个软件工程师,我觉得相对于调库调参,我们更应该有更牢靠的基础知识。不然很容易陷入,高深的数学不会,基础的知识也不知道的尴尬境地。毕竟从事算法核心的,没有多少人,而作为工程师,我始终觉得我们的使命是如何把这些天赋异禀,脑袋发达的人的想法,构思,算法变成真正可用的东西。而在我从业不算长的年限中遇过的人来看,这绝对不是一种很简单的能力。
众所周知,Binder是Android系统中最主要的进程间通信套件,更具体一点,很多文章称之为Binder驱动,那为什么说它是一个驱动呢,驱动又是何物,让我们自底向上,从内核中的Binder来一步步揭开它的面纱。本文重点在帮助读者对于Binder系统有一个简略的了解,所以写得比较笼统,后续文章会详细分析。
原文 https://mp.weixin.qq.com/s/8A_y1dlZrUvpaJfbQrVK3w
0x01 vDSO 是什么 孙子兵法最核心的价值观就是:知己知彼,百战不殆。 为了搞清楚vDSO在内核提权中的应用,首先就要搞清楚vDSO到底是什么,我们来看下vDSO的定义: The "vDSO" (virtual dynamic shared object) is a small shared library that the kernel automatically maps into the address space of all user-space applications. Applica
虚拟内存可以用来管理物理内存,进程直接和虚拟内存进行打交道而不是物理内存,为什么这样设计?
/proc/PID/smaps 文件是基于 /proc/PID/maps 的扩展,他展示了一个进程的内存消耗,比同一目录下的maps文件更为详细。
eBPF (Extended Berkeley Packet Filter) 是 Linux 内核上的一个强大的网络和性能分析工具,它允许开发者在内核运行时动态加载、更新和运行用户定义的代码。
" Linux 应用进程 " 可以根据 " Linux 内核 " 提供的 " 调度策略 " 选择 " 调度器 " ;
★ 本文旨在介绍vDSO在内核提权中绕过SMEP/PXN的应用 ★ 0x01 vDSO 是什么 孙子兵法最核心的价值观就是:知己知彼,百战不殆。 为了搞清楚vDSO在内核提权中的应用,首先就要搞清楚vDSO到底是什么,我们来看下vDSO的定义: The "vDSO" (virtual dynamic shared object) is a small shared library that the kernel automatically maps into the address space of al
学习Linux系统编程一共要翻越三座大山 – 进程地址空间、文件系统以及多线程,这三部分内容很难但是非常重要;而今天我们将要征服的就是其中的第一座高山 – 进程地址空间。
" 实时进程 " 优先级 高于 " 普通进程 " , 如果当前 Linux 系统的执行队列中有 " 实时进程 " , 调度器 会 优先选择 " 实时进程 " 进行调度 ;
进程间通信(interprocess communication,简称 IPC)指两个进程之间的通信。系统中的每一个进程都有各自的地址空间,并且相互独立、隔离,每个进程都处于自己的地址空间中,因此相互通信比较难,Linux 内核提供了多种进程间通信的机制。
指挥linux系统稳定运行的核心是linux内核。这个内核相当于linux系统的“大脑”,linux系统的就是在linux内核上发展起来的。linux高可用就是针对linux内核的。
在Linux系统中,每个进程都有独立的虚拟内存空间,也就是说不同的进程访问同一段虚拟内存地址所得到的数据是不一样的,这是因为不同进程相同的虚拟内存地址会映射到不同的物理内存地址上。
很早之前写了一篇图解虚拟内存的文章:真棒!20 张图揭开内存管理的迷雾,瞬间豁然开朗
近日曝出OpenSSH SFTP 远程溢出漏洞。OpenSSH服务器中如果OpenSSH服务器中没有配置"ChrootDirectory",普通用户就可以访问所有文件系统的资源,包括 /proc,在>=2.6.x的Linux内核上,/proc/self/maps会显示你的内存布局,/proc/self/mem可以让你任意在当前进程上下文中读写,而综合两者特性则可以造成远程溢出。 目前受影响的版本是<=OpenSSH 6.6,安恒信息建议使用该系统的用户尽快升级到最新版本OpenSSH 6.7, OpenS
eBPF(扩展的伯克利数据包过滤器)是 Linux 内核中的一个强大功能,可以在无需更改内核源代码或重启内核的情况下,运行、加载和更新用户定义的代码。这种功能让 eBPF 在网络和系统性能分析、数据包过滤、安全策略等方面有了广泛的应用。
继上周介绍了稳定性三大故障之一的ANR类故障后,本章继续介绍第二大类故障Crash/Tombstone及其分析定位方法。
快表其实是 TLB,是 CPU 封装在芯片里的一个东西,这个概念我在这篇也有讲到:真棒!20 张图揭开内存管理的迷雾,瞬间豁然开朗
Linux 用户态和内核态由于 CPU 权限的限制,通信并不像想象中的使用进程间通信方式那么简单,今天这篇文章就来看看 Linux 用户态和内核态究竟有哪些通信方式。
本文翻译自 2016 年 Daniel Borkman 在 NetdevConf 大会上的一篇文章:On getting tc classifier fully programmable with cls_bpf[1]。
领取专属 10元无门槛券
手把手带您无忧上云