
linux
文章平均质量分 71
koozxcv
欢迎大家关注我的微信公众号:移动安全骑士,从2024.11月开始,我会在公众号中更新移动安全最新知识内容。和大家一起学习探讨。
展开
-
mmap详解
mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。原创 2015-10-20 21:05:34 · 623 阅读 · 0 评论 -
Access the Linux kernel using the /proc filesystem
来自IBM的一篇关于proc文件系统的文章:http://www.ibm.com/developerworks/linux/library/l-proc/index.htmlAccess the Linux kernel using the /proc filesystemThis virtual filesystem opens a window of communica转载 2015-12-01 20:07:28 · 585 阅读 · 0 评论 -
linux中系统调用
我们每天都在使用它们。不过您清楚系统调用是如何在用户空间和内核之间执行的吗?本文将探究 Linux 系统调用接口(SCI),学习如何添加新的系统调用(以及实现这种功能的其他方法),并介绍与 SCI 有关的一些工具。系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨越用户空间与内核之间的界限。在特定架构原创 2015-12-01 18:13:35 · 760 阅读 · 0 评论 -
Linux 内核链表
一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式。相对于数组,链表具有更好的动态性,建立链表时无需预先知道数据总量,可以随机分配空间,可以高效地在链表中的任意位置实时插入或删除数据。链表的开销主要是访问的顺序性和组织链的空间损失。通常链表数据结构至少应包含两个域:数据域和指针域,数据域用于存储数据,原创 2015-12-02 21:28:54 · 447 阅读 · 0 评论 -
offsetof和container_of两个内核中的宏
1、前言 很早之前就接触到这两个宏,只是觉得功能很强大,最近在内核漏洞利用中又看到这两个宏被使用,觉得有必要对内核中经典的算法,结构等mark一下。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计原创 2015-12-24 14:47:27 · 552 阅读 · 0 评论 -
Linux SLUB 分配器详解
多年以来,Linux 内核使用一种称为 SLAB 的内核对象缓冲区分配器。但是,随着系统规模的不断增大,SLAB 逐渐暴露出自身的诸多不足。SLUB 是 Linux 内核 2.6.22 版本中引入的一种新型分配器,它具有设计简单、代码精简、额外内存占用率小、扩展性高,性能优秀、方便调试等特点。本文先介绍 SLAB 分配器的基本原理,然后分析其不足之处并详细介绍 SLUB 的设计思想,最后介绍转载 2015-12-07 15:06:57 · 479 阅读 · 0 评论 -
Linux中守护进程详解
(1)Linux 守护进程概述Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmai原创 2015-12-25 11:31:06 · 581 阅读 · 0 评论 -
wait、waitpid详解
在前面的文章中,我们已经了解了父进程和子进程的概念,并已经掌握了系统调用exit的用法,但可能很少有人意识到,在一个进程调用了exit之后,该进程并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构。在Linux进程的5种状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进原创 2015-12-08 13:59:13 · 935 阅读 · 0 评论 -
linux进程PCB--task_struct
内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 进程是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。注意,程序并不是进程,实际上两个或多个进程不仅有可能执行同一程序,而且还有可能共享地址空间等资源。 Linux内核通过一个被称为进程描述符的task_struct结构原创 2015-12-08 18:39:46 · 1321 阅读 · 2 评论 -
Linux 内核的同步机制(1)
本系列文章分两部分,第一部分详细地介绍了 Linux 内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例。第二部分将详细介绍在Linux内核中的另外一些同步机制,包括大内核锁、读写锁、大读者锁、RCU和顺序锁。一、 引言在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行转载 2016-01-26 10:37:05 · 620 阅读 · 0 评论 -
SUID SGID详解
如果你对SUID、SGID仍有迷惑可以好好参考一下!由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、SGID的问题也经常有人提问,但回答的人一般答得不够详细,于是查了一些资料,决定整理成本文,以供大家参考。限于本人的水平问题,文章中如果有不当之处,请广大博友指正。 一、UNIX下关于文件原创 2016-01-11 20:54:46 · 788 阅读 · 0 评论 -
Linux启动流程
linux系统的启动流程关于linux系统的启动流程我们可以按步进行划分为如下:BIOS POST自检BIOS(Boot Sequence)引导操作系统 加载对应引导上的MBR(bootloader)主引导设置加载其BootLoader加载操作系统启动BIOS,准备实模式下的中断向量表和中断服务程序电脑启动后,CPU逻辑电路被设计为只转载 2016-03-19 21:03:07 · 1642 阅读 · 0 评论 -
/proc/[pid]/下的maps、status、stat、statm
/proc/[pid]/maps 文件解释查看进程的虚拟地址空间是如何使用的。 该文件有6列,分别为: 地址:库在进程里地址范围权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;偏移量:库在进程里地址范围设备:映像文件的主设备号和次设备号;节点:映像文件的节点号;路径: 映像文件的路径每项都与一个vm_area_struct结构成员对应范例原创 2016-03-23 09:56:21 · 5010 阅读 · 0 评论 -
linux自旋锁和futex
自 旋锁最初是为了在多处理器系统(SMP)使用而设计的,但是只要考虑到并发问题,单处理器在运行可抢占内核时其行为就类似于SMP。因此,自旋锁对于 SMP和单处理器可抢占内核都适用。可以想象,当一个处理器处于自旋状态时,它做不了任何有用的工作,因此自旋锁对于单处理器不可抢占内核没有意义,实际 上,非抢占式的单处理器系统上自旋锁被实现为空操作,不做任何事情。在Linux下,信号量和线程互斥原创 2016-04-09 15:32:56 · 2547 阅读 · 0 评论 -
awk命令详解
同样的,每个知识点的学习都是来自项目驱动。今天看了一个开源的框架:dtf下面是关于dtf的介绍:The Android Device Testing Framework ("dtf") is a data collection and analysis framework to help individuals answer the question: "Where are the原创 2016-05-18 19:45:28 · 882 阅读 · 0 评论 -
sed-非交互式流编辑器详解
sed是一个非交互式的流编辑器(stream editor)。所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出;而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行。整个文件像流水一样被逐行处理然后逐行输出。sed一次处理一行内容。处理时,把原创 2016-05-19 17:46:17 · 1396 阅读 · 0 评论 -
Linux对内存管理的两篇好文章
https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.OdxEY9&articleid=315https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.93g9Yd&articleid=334原创 2016-06-08 15:53:40 · 619 阅读 · 0 评论 -
深刻理解linux内核调用栈、栈帧结构
我们知道,栈溢出通常是因为递归调用层次太深导致,那么为什么递归调用层次太深回导致栈溢出呢,解决这个问题之前我们先看一下与函数调用有关的栈的基本概念:1. 每一个线程拥有一个调用栈结构(call stack),调用栈存放该线程的函数调用信息2. 程序中每一个未完成运行的函数对应一个栈帧(stack frame),或者一个更响亮的名字,过程的活动记录,栈帧 中保存原创 2015-11-23 17:15:12 · 5563 阅读 · 0 评论 -
Linux内核和用户空间应用程序的接口—系统调用
系统调用就是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中提供的,因此无法执行直接调用;相反,您必须使用一个进程来跨越用户空间与内核之间的界限。在特定架构中实现此功能的方法会有所不同。因此,本文将着眼于最通用的架构 —— i386。在本文中,我将探究 Linux SCI,演示如何向 2.6.20 内核添加一个系统调用,然后从用户空间来使用这个函数。我们还将研究在原创 2015-11-02 14:49:21 · 8494 阅读 · 0 评论 -
udev详解
udev详解我们知道,在对待设备文件这块,Linux改变了几次策略。在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs, 一个基于内核的动态设备文件系统,他首次出现在2.3.46内核中。Mandrake,Gentoo等Linux分发版本采用了这种方式。devfs创建的设备文件是动态的。但是devfs有一些严原创 2015-11-06 11:33:37 · 791 阅读 · 3 评论 -
linux下线程的同步和互斥
线程的同步和互斥在操作系统中引入线程以及线程并发性的概念后,增加了系统的效率,同时,由于资源有限导致线程之间的资源竞争和共享,因此产生一个问题,例如,当多个线程同时申请一台打印机的时候,如果不加限制,很可能使多个线程的输出结果交织在一起,产生错误的打印。下面我来为大家主要介绍并发执行的线程使用临界资源时,同步与互斥的以及控制方法。1.临界资源的概念:多个线程不能同时使用的资源称为临界资源C原创 2015-10-22 20:17:30 · 1586 阅读 · 0 评论 -
Linux core dump详解
有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.以下是我们详细的对Linux core dump的调试技术进行的介绍:转载 2015-10-24 15:20:09 · 974 阅读 · 0 评论 -
linux性能调优工具perf
perf学习-linux自带性能分析工具 什么是perf?linux性能调优工具,32内核以上自带的工具,软件性能分析。在2.6.31及后续版本的Linux内核里,安装perf非常的容易。几乎能够处理所有与性能相关的事件。 什么是性能事件?指在处理器或者操作系统中发生,可能影响到程序性能的硬件事件或者软件事情。 主要关注点在哪原创 2015-11-09 18:33:33 · 623 阅读 · 0 评论 -
linux下X86架构IDT解析
一、中断描述符表IDT1.中断描述符表IDT是一个系统表,它与每一个中断或异常向量相联系,每一个向量在表中有相应的中断或异常处理程序的入口地址。内核在允许中断发生前,必须适当的初始化IDT.2.IDTR寄存器可以使IDT位于内存的任何地方,它制定IDT的线性基地址及其限制(最大长度)。可以通过sidt汇编语句获得IDT的基地址及限制长度。3.表中的每一项对应一个中断或异常向转载 2015-11-09 19:28:48 · 2239 阅读 · 0 评论 -
Linux下system和exec函数族的区别
分别man system和 execl得到——————————————————————————————————————————————————————————————NAME system - execute a shell commandSYNOPSIS #include int system(const char *comm原创 2015-11-09 19:56:47 · 1479 阅读 · 0 评论 -
dmesg命令处理故障和查看系统信息详解
‘dmesg’命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信息。当计算机启动时,系统内核(操作系统的核心部分)将会被加载到内存中。翻译 2015-11-11 20:50:11 · 24846 阅读 · 0 评论 -
优先级反转问题的和解决方法
我们都知道,在操作系统的调度算法中有一种算法叫优先级调度算法。这种调度算法可能产生优先级反转的问题,下面我们就简单聊聊优先级反转和解决方法。原创 2015-10-26 16:48:49 · 2956 阅读 · 0 评论 -
AT&T汇编(linux内核学习必须掌握)
AT&T汇编和8086汇编语言虽然两者很相似,但是还是不能根据8086的语法规则来读AT&T汇编的吧,所以还是要看看AT&T汇编的语法规则,因为在读内核代码时,跟硬件打交道的部分代码是用AT&T汇编编写的,所以不可避免的会遇到AT&T汇编,下面先来看看AT&T汇编的语法规则吧。一、 大小写 INTEL格式的指令使用大写字母,而AT&T格式的使用小写字母。 例: INT转载 2015-11-13 19:46:38 · 1073 阅读 · 0 评论 -
栈内存控制
栈内存控制所谓栈内存控制就是如何能够随意改变栈上的内容,或者重新利用上个函数栈上的内容。先来看一个简单的例子:#includeint foo(int initial,int val){int local;if(initial) { local=val; printf("foo local=%d\n",local);原创 2015-10-21 15:44:40 · 793 阅读 · 0 评论 -
linux的环境变量文件enviroment 、profile、bashrc和.bashrc以及.bash_profile
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。 (2)/etc/environment:是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。(3)/etc/bashrc转载 2015-10-27 16:32:50 · 709 阅读 · 0 评论 -
Mr. Process的一生-Linux内核的社会视角(2)-调度
在这篇文章里,以Mr. P的工作经历来说明了Linux调度的一些比较重要的机制。介绍了IO消耗型进程和处理器消耗型的进程,O(1)调度等等。这些是比较大的方面,当大的方面理解了之后,那些世界顶尖高手写的源码也就更容易看懂一些了。转载 2015-10-31 15:18:01 · 525 阅读 · 0 评论 -
Mr. Process的一生-Linux内核的社会视角(1)-启动
这篇文章讲的是盘古开天地的事。话说Mr. Process是一个现代人,但是,只要是人,总该有个祖先。人们总想知道自己从哪来,然后才可以估摸算一下自己将去向何方。所以咱也要了解一下Linux的世界里人类的起源。按下电源开关的那个真实的人就是Linux世界里的上帝,他创造了Linux世界的一切。当他按下机箱上的电源开关时,主板开始供电,CPU上的Reset Pin被拉高,这会引起CPU转载 2015-10-31 14:47:53 · 553 阅读 · 0 评论 -
linux 内存分配机制
这几天在观察apache使用内存情况,所以特意了解了下linux的内存机制,发现一篇写得还不错。转来看看。一般来说在ps aux中看到的rss就是进程所占用的物理内存。但是如果将所有程序的rss加起来的话。会发现比实际的内存还要大很多,这个是由于rss还包括了共享的部分。这个可以通过pmap -d PID来看到具体情况。一. 内存使用说明Free 命令相对于top 提供了更简洁的查看系转载 2015-10-28 17:02:49 · 3469 阅读 · 0 评论 -
execve函数族详解
execve(参数1,参数2,参数3)参数1:命令所在路径参数2:命令的集合参数3:传递给执行文件的环境变量集 [c-sharp] view plaincopy#include #include int main(int arg,char **args) { //char *转载 2015-11-17 11:33:57 · 4455 阅读 · 0 评论 -
IOCTL命令-_IO, _IOR, _IOW, _IOWR 幻数的理解
有一年半时间没有一行一行的写过linux驱动程序了,有的东西会发现遗忘了,今天就当是复习一下吧。在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非串行设备输入流修改波特率,如果每一个ioctl命令都是唯一的,应用程序进行这种操作时就会得到一个原创 2016-06-20 12:05:16 · 2244 阅读 · 0 评论