转自:http://blog.chinaunix.net/uid-25968088-id-3426026.html 目录 OPEN系统调用过程 Open在内核里面的入口函数时sys_open Sys_open函数内容 do_sys_open(AT_FDCWD, filename, flags, mode) 1.      找到一个本进程没有使用的文件描述符fd(int型) 2.      分配一个全新的struct file结构体 3.      根据传人的pathname查找或建立对应的den…
转自:http://blog.chinaunix.net/uid-28362602-id-3425881.html 目录 用户空间的write函数在内核里面的服务例程为sys_write Vfs_write函数实现原理 WORD里面的目录复制过来似乎不能直接用..还是放在这里当主线看吧.. 用户空间的write函数在内核里面的服务例程为sys_write root@syslab ~]# grep write /usr/include/asm/unistd_64.h #define __NR_wr…
GDB的那些奇淫技巧 evilpan 收录于 Security  2020-09-13  约 5433 字   预计阅读 11 分钟  709 次阅读  gdb也用了好几年了,虽然称不上骨灰级玩家,但也有一些自己的经验,因此分享出来给大家,顺便也作为一个存档记录. 多进程调试 最近在调试一个漏洞的exploit时遇到一个问题.目标漏洞程序是一个 CGI 程序,由主进程调起,而且运行只有一瞬的时间:我的需求是想要在在该程序中下断点,在内存布局之后可以调试我的 shellcode,该如何实现?当然目…
转自:http://blog.csdn.net/kobbee9/article/details/7397010 brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的:       每个进程可访问的虚拟内存空间为3G,但在程序编译时,不可能也没必要为程序分配这么大的空间,只分配并不大的数据段空间,程序中动态分配的空间就是从这一块分配的.如果这块空间不够,malloc函数族(realloc,calloc等)就调用sbrk函数将数据段的下界移动,sbrk函数在内核的管理…
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理 转自:https://www.jianshu.com/p/2b71ea919d49 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Java网络编程和NIO https://blog.csdn.net/column/details/21963.html 部分代码会放在我的的Github:https://github.com/h2pl/ 浅谈 Linux…
一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到slave; 3)slave有一个I/O线程把master发送的二进制写入到relay日志里面: 4)slave有一个SQL线程,按照relay日志处理slave的数据: 二 操作步骤 2.1我们准备两台装好mysql的服务器(我在此用docker模拟了两台机器) 环境 mysql版本 ip地址:端口号…
转载自:http://blog.csdn.net/hongjiujing/article/details/6831192 ARM Linux系统调用的原理 操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口.在应用程序和硬件之间设置一个额外层具有很多优点.首先,这使得编程更加容易,把 用户从学习硬件设备的低级编程特性中解放出来.其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性. 最后,更重要的是这些接口使得程序具有可移植性,因为只要内核…
引言:分析Android源码的过程中,要想从上至下完全明白一行代码,往往涉及app.framework.native一直到kernel,可能迷失到代码世界,明白了系统调用原理,或许能帮你峰回路转,找到进入kernel函数的入口.本文主要讲解ARM架构相关源码: /bionic/libc/kernel/uapi/asm-arm/asm/unistd.h /bionic/libc/arch-arm/syscalls/kill.S /kernel/arch/arm/kernel/calls.S /ke…
本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程",主要涉及到浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程方面的内容,对于浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程感兴趣的同学可以参考一下.   简介: 本文试图完整地描述 Linux 系统中 C 语言编程中的时…
转载自: http://englishman2008.blog.163.com/blog/static/2801290720114210254690/ 1. 原理    int a;     int size = 8;        <----> 1000(bin) 计算a以size为倍数的下界数:    就让这个数(要计算的这个数)表示成二进制时,最后三位为0就可以达到这个目标.只要下面这个数与a进行"与运算"就可以了:    11111111 11111111 1111…
最近在做Android,其中一个任务是写一个能在Linux命令行运行的测试AP,运行这个AP就能关闭设备电源,即Power Off. 在 Linux内核中已经找到了关闭电源的函数kernel_power_off(),然后也知道了在sys_reboot()函数中调用 kernel_power_off()的,但是linux的应用程序怎么调用sys_reboot()呢? 经过1天的研究,终于搞明白了 这样的函数属于linux的系统调用函数(System call),需要用system call的方式调…
原文How TCP backlog works in Linux水平有限,难免有错,欢迎指出!以下为翻译: 当应用程序通过系统调用listen将一个套接字(socket)置为LISTEN状态时,需要为该套接字指定一个backlog参数,该参数通常被描述为用来限制进来的连接队列长度(queue of incoming connections). 由于TCP协议的三次握手机制,一个进来的套接字连接在进入ESTABLISHED状态并且可以被accept调用返回给应用程序之前,会经历中间状态SYN RE…
[转]unix/linux中的dup()系统调用    在linux纷繁复杂的内核代码中,sys_dup()的代码也许称得上是最简单的之一了,但是就是这么一个简单的系统调用,却成就了unix/linux系统最著名的一个特性:输入/输出重定向.    sys_dup()的主要工作就是用来“复制”一个打开的文件号,使两个文件号都指向同一个文件.既然说简单,我们就首先来看一下它的代码(定义在fs/fcntl.c中):   而sys_dup()的主体是dupfd()(定义在同一个文件中):       …
一.LVM原理 [MD]:Multi Device 多设备 Mdadm是一个用户空间工具,是RAID的管理工具,与真正的RAID工作没有太大关系.真正的RAID集成在linux内核中 [DM]Device Mapper设备映射也是linux中一种常用的管理机制 DM 与MD近似,也能够提供一种逻辑设备 DM比MD的功能要强大.因为DM不仅仅能提供MD的RAID的功能,它还是逻辑卷(LVM2)基础,同时,在逻辑卷的基础上我们也能实现RAID0,RAID1.这样的功能.所有DM与MD中有某些功能是重…
系统调用是应用程序和操作系统内核之间的功能接口.其主要目的是使得用户 可以使用操作系统提供的有关设备管理.输入/输入系统.文件系统和进程控制. 通信以及存储管理等方面的功能,而不必了解系统程序的内部结构和有关硬件细 节,从而起到减轻用户负担和保护系统以及提高资源利用率的作用. Linux操作系统作为自由软件的代表,它优良的性能使得它的应用日益广泛, 不仅得到专业人士的肯定,而且商业化的应用也是如火如荼.在Linux中,大部分 的系统调用包含在Linux的libc库中,通过标准的C函数调用方法可以…
Linux中LVM2原理及制作LVM2 一.LVM原理 [MD]:Multi Device 多设备 Mdadm是一个用户空间工具,是RAID的管理工具,与真正的RAID工作没有太大关系.真正的RAID集成在linux内核中 [DM]Device Mapper设备映射也是linux中一种经常使用的管理机制 DM 与MD近似,也可以提供一种逻辑设备 DM比MD的功能要强大.由于DM不只能提供MD的RAID的功能,它还是逻辑卷(LVM2)基础,同一时候,在逻辑卷的基础上我们也能实现RAID0,RAID…
首先介绍一下linux中内存是如何使用的. 当有应用需要读写磁盘数据时,由系统把相关数据从磁盘读取到内存,如果物理内存不够,则把内存中的部分数据导入到磁盘,从而把磁盘的部分空间当作虚拟内存 来使用,也称为Swap.如果给所有应用分配足够内存后,物理内存还有剩余,linux会尽量再利用这些空闲内存,以提高整体I/O效率,其方法是把这部 分剩余内存再划分为cache及buffer两部分加以利用. 从磁盘读取到内存的数据在被相关应用程序读取后,如果有剩余内存,则这部分数据会存入cache,以备第2次读…
键值 = 文件标示符 + 项目ID 当用到进程间的通信时, 必须要注意到的是键值是怎么产生的,我们知道任何一个文件时通过文件名来访问的, 而内核在对应的给其一个值,也就是文件标示符. 系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值 .通常情况下,该id值通过ftok函数得到 .  ftok原型如下:key_t ftok( char * fname, int id ) 此时这个 id也就是项目 ID,最后将两者结合生成了键值!这里所谓的文件标示符其实下面提到的 内核的物理编号,也就…
1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKernel/linux-2.6.32.63 为了方便,使用chmod 777 -R linux-2.6.32.63/ 将所有的内核文件都改为全权限,这样就可以在非root状态修改文件进行编译了. 2 添加系统调用 首先进入linux-2.6.32.63目录下.以后的文件路径都是以此目录为“根目录”的.…
Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cutler  Linux读写内存数据的三种方式 台湾作家林清玄在接受记者采访的时候,如此评价自己30多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色:第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰:进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正…
技术实现 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.第一部分主要介绍了一些零拷贝技术的相关背景知识,简要概述了 Linux 为什么需要零拷贝技术以及 Linux 中都有哪几种零拷贝技术.本文是本系列文章的第二部分,针对第一部分内容中提到的几种零拷贝技术分别进行更详细的介绍,并对这些零拷贝技术的优缺点进行分析. 0 评论: 黄 晓晨, 软件工程师, IBM 冯 瑞, 软件工程师, IBM 2011 年 1…
catalogue . pipe匿名管道 . named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别.管道是Linux支持的最初Unix IPC形式之一,具有以下特点 . 管道是半双工的,数据只能向一个方向流动; 需要双方通信时,需要建立起两个管道 . 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)…
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 由于操作系统实验的缘故,有一个实验需要在Linux内核中增加自定义的系统调用函数,经过摸爬滚打,查资料,爬坑之后,终于成功了(其实,总体来说还是比较顺利~) 增加自定义系统调用函数的过程/原理: 1.在syscalls.h头文件增加新增函数的声明: 2.在syscalls.h头文件增加新增函数的函数实现代码块: 3.在unistd_64…
转载:原文地址https://www.ibm.com/developerworks/cn/linux/l-vfs/ 1. 摘要 本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核.总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等.本文侧重于通过具体的代码分析来解释 Linux 内…
Linux 中的零拷贝技术,第 2 部分 https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy2/index.html   Linux 中的直接 I/O 如果应用程序可以直接访问网络接口存储,那么在应用程序访问数据之前存储总线就不需要被遍历,数据传输所引起的开销将会是最小的.应用程序或者运行在用户模式下的库函数可以直接访问硬件设备的存储,操作系统内核除了进行必要的虚拟存储配置工作之外,不参与数据传输过程中的其它任何事情.直接 I/O…
一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指针,再间接访问得到这个文件对应的文件表. 1.1.2. 文件描述符这个数字是open系统调用内部由操作系统自动分配的,操作系统分配这个fd时也不是随意分配,也是遵照一定的规律的:fd从0开始依次增加.fd也是有最大限制的,在linux的早期版本中(0.11)fd最大是20,所以当时一个进程最多允许打…
Linux 必学的 60 个命令 Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在 Linux 系统上工作离不开使用系统提供的命令.要想真正理解 Linux 系统,就必须从 Linux 命令学起,通过基础的命令学习可以进一步理解 Linux 系统. 不同 Linux 发行版的命令数量不一样,但 Linux 发行版本最少的命令也有 200 多个.这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个…
硬链接(Hard Link)和软链接也称为符号链接(Symbolic Link)的目的是为了解决文件的共享使用问题.要阐明其原理,必须先理解Linux的文件存储方式. 索引结点 Linux是一个UNIX类操作系统,所有类型的UNIX文件都是由操作系统通过索引节点来管理的. 索引节点是一个控制结构,包含操作系统所需的关于某个文件的关键信息.多个文件名能与一个索引节点相关联,但一个活跃的索引节点只能与一个文件相关联,且每个文件只能由一个索引节点来控制.文件的属性.访问权限和其他控制信息都保存在索引节…
在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想.这些思想中有一些来源于 MULTICS,现在已经被 Windows 等其他操作系统使用.Linux 的设计理念就是 小的就是好的(Small is Beautiful) .虽然 Linux 只是使用了最简单的机制和少量的系统调用,但是 Linux 却提供了强大而优雅的文件系统. Linux 文件系统基本概念 Linu…
Linux下的Shell工作原理 Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口.系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序.它的执行过程基本上按如下步骤: (1)读取用户由键盘输入的命令行. (2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve( )内部处理所要求的形式. (3)终端进程调用fork(…