12 broler

尚未进行身份认证

个人网站:xiaopangpipi.com 邮箱:575705195@qq.com

等级
TA的排名 8k+

图书出版《深入Linux内核架构与底层原理》

https://item.jd.com/12233973.html

2017-12-01 19:30:31

OpenSSL代码阅读

毫无疑问,OpenSSL是当今使用最广泛的SSL和加密套件的实现。但是由于其代码的低质量,OpenBSD重新实现了LibreSSL,谷歌更加激进的实现了BoringSSL。BoringSSL专门服务于TLS和HTTPS,但是OpenSSL还有很多其他的功能,OpenSSL是一个大而全的系统。BoringSSL已经在逐步应用到谷歌的所有项目中,主体由C++写成。本书重点介绍OpenSSL,同时带

2017-10-15 22:40:39

如何进行协议逆向

抓包看到一系列的数据包,如何从中恢复出设计时为每个域的定义?如果我们设计足够多,我们可以通过经验来预测。比如无论何种协议都需要有长度的域,这个域可能是代表有多少个字节,也可能是代表有多少字,总之一般会有这样一个域。一般情况下,大部分协议设计都是按域设计的,极少出现HTTP/2那种二进制压缩格式的,这是人脑的逻辑属性决定的。而域的显著特点是大部分域都有取值范围,并且每个域的结束标记一般是一样的。所以

2017-02-08 11:19:33

正则引擎在数据包匹配中的工程分析

匹配 常见的通用匹配算法有字符串匹配和正则匹配。字符串匹配常见的算法有Boyer-Moore算法、orspool算法、unday算法、MP算法、R算法、AC自动机。Boyer-Moore、Horspool、Sunday算法都是基于后缀数组的匹配算法,区别在于移动的方式不一样。MP是前缀匹配算法,R算法是hash匹配,AC自动机可以同时匹配多个pattern。正则匹配有两种NFA和DFA,都是基于有

2017-01-22 10:17:48

linux内核接口——Linux二进制兼容性问题

Linux上二进制有一个显著的特点就是可移植性不强。我们在不同的发行版之间,不同的内核版本之间,程序往往是不能通用的。硬件平台众所周知的,硬件平台不一样,指令集不一样,二进制就几乎没有可移植的能力。ABI在架构上,必须要区分x86和x64两种架构,一般的x64的机器都能运行x86的程序,但是如果你把程序编译为x86,你就得面对大量的x64服务器的性能瓶颈。这个架构上的区别在任何的平台上都一样的,并

2016-12-21 15:17:18

linux内核工程导论-Linux用户和权限系统

Linux用户和权限系统简介我们使用linux系统,一定会使用一个用户,没有用户就不可能使用任何的系统功能,包括系统调用。因为系统调用本身也是要有用户的。我们刚登录一个系统,需要一个login程序,验证了用户名密码之后,就会返回给你一个shell。后面执行的内容都是在shell中执行的。包括可以在shell中设置ulimit做资源限制,我们也可以发现用户和密码都存储在/etc/passwd和/et

2016-11-07 16:03:30

linux主机防御ids 常用开源工具

,,ExecShield,Openwall,selinux,apparmor 系统防御方面的开源软件主机防御工具验证系统Pam:几乎在所有的发行版上默认安装Opie内核安全Grsecurity:专注于内核的安全,给内核提供了很多安全补丁ExecShield:设置不可执行的标志位(现代的x64硬件携带的,就可以不用软件了,x86是不带的)Linux Intrusion Detection Syste

2016-09-22 15:28:17

linux内核工程导论-系统调用

http://www.cppblog.com/hex108/archive/2010/11/22/134313.html 传统的系统调用是怎样的?    —— int 0x80的时代.... ;通过寄存器传参mov $n ,eax ;将系统调用号放到eax中int 0x80sysenter/sysexit的出场        在一个Kernel.org的邮件列

2016-09-18 11:25:35

Linux内核工程导论——进程:ELF文件执行原理(3)

编译与执行elf文件由ld程序连接,由ld.so程序执行。分为静态和动态两个过程。同样的,在二进制文件中体现在segment是动态的文件布局,由ld.so使用。而section是静态的文件布局,由ld使用。一般编译代码的和执行代码的是不同的人,不同的机器。所以静态的编译就需要一种语言告诉动态的怎么执行,这个语言就是elf文件格式。Elf文件里面有segment,有section。我们知道执行的时候

2016-09-12 14:37:56

函数调用

函数调用约定现代的几乎所有的编程语言都离不开函数和参数的概念。而这个概念是编程语言级别的,而不是硬件级别的。也就是说硬件上本来没有函数的概念。只是函数的用的太普遍,硬件开始为函数准备专用的指令。我们以x86的硬件举例。Cpu的功能是计算,读取数据,执行指令。这里面的问题就是指令如何执行。我们完全可以顺序的执行所有的指令,也可以达到计算机的计算目的。但是这样在使用者来看是不现实的,完全顺序的执行代码

2016-07-07 16:23:38

linux内核工程导论-网络:tcp拥塞控制——PRR

Prr是谷歌对于快速回复算法的改进。快恢复是在检测到拥塞发生的时候将发送窗口降低到一半(怎么才算拥塞由另外的算法决定),PRR简介PRR是最新的linux的默认推荐拥塞算法,之前的是cubic。但是有意思的是,在linux中使用了prr仍然可以以cubic作为默认拥塞算法。因为众所周知的,拥塞算法大致都是一样的,只是在一些参数和细节调整上有区别。Linux上的prr实现就是个对tcp_input.

2016-06-29 13:10:23

linux内核工程导论-网络:tcp拥塞控制

这篇文章本来是在tcp那篇里面的,但是那篇太长了,不专一。就完善了一下提取出来了。TCP拥塞控制       拥塞控制讨论的是很多个同时存在的tcp连接应该怎么规划自己的数据包发送和接收速度,以在彼此之间共享带宽,同时与其他实体的机器公平的竞争带宽,而不是自己全占。        拥塞控制的核心是AIMD(additive-increase/multiplicative-decrease ),线

2016-05-27 16:19:35

哈希理论

计算哈希值方法哈希场景哈希算法有两个评价标准,一个是无法回源,一个是随机性(碰撞概率小),一个是计算速度。不同的应用环境对这几个目的的需求是不一样的。例如文件的md5计算和签名算法,无法回源与随机性都需要。但是哈希表的数据结构在使用的时候,主要看重随机性和计算速度。例如下载一个文件md5与一个病毒的md5一样,这时候下载器就认为你下载了正确的文件,就会带来严重的安全问题,这时其对哈希算法的要求在随

2016-05-26 13:39:12

linux路由表,策略路由,路由查找

路由表内核中路由表有2种:l 一个是缓存路由(fib),是自动学习生成自动管理的,用户没必要去干预,但是内核还是提供了方法让用户可以去清空它。但是用户不能设置它的项,但是可以根据这个缓存更新的原理从外部影响他。l 路由表:一共有256个,在内核中是一个数组,可以配置让内核使用其中的一个或者多个。默认的是使用0,254,255这三个。一般大家关系都是254号的main路由,route 命令看到的和操

2016-05-16 12:35:49

Linux内核工程导论——进程:ELF文件执行原理(2)

ELF强符号与弱符号(本小节是转别人的)我们经常在编程中碰到一种情况叫符号重复定义。多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误。比如我们在目标文件A和目标文件B都定义了一个全局整形变量global,并将它们都初始化,那么链接器将A和B进行链接时会报错:1 b.o:(.data+0x0): multiple definition of `globa

2016-05-03 16:18:53

Linux内核工程导论–网络:TCP:netlink与tcp_diag编程

概览http://m.oschina.net/blog/351007有一个示例程序,但是它用的v1的接口。http://kristrev.github.io/2013/07/26/passive-monitoring-of-sockets-on-linux/教了怎么用v2的接口。 inet_diag和tcp_diag是两个模块,但是统一使用inet_diag的接口,inet_diag又是使用net

2016-03-31 12:46:53

Linux内核工程导论——内核种类

内核概览linux内核并不是唯一的内核,也并不是唯一的一种内核。实际上linux内核属于Monolithic kernel的一个实现,这种内核还包括Unix系列(BSD、SunOS等),dos和windows 9x系列,还有OpenVMS,XTS-400,z/TPF等一些不常见的系统内核。         内核的种类包括:exokernels,nanokernels ,microkernels,

2016-03-17 13:21:15

eBPF编程

简介         如果读取数据包时eBPF程序想要读取超过数据包边界的内容,eBPF程序将会被停止执行。硬件架构寄存器* R0       - return value from in-kernel function, and exit value for eBPF program* R1 - R5  - arguments from eBPF program to in-kernel fun

2016-03-07 12:41:52

C++——boost:asio的使用

背景知识         高效网络编程一般都要依赖于IO复用,IO复用是指同时发送并监听处理很多socket或者文件读写的事件。IO复用的高效方式目前常用的有两种:Reactor和Proactor。这两种方式在操作系统级都是异步和非阻塞的,也就是说用户提交了一个请求后都可以直接返回。但是Reactor在用户层级看来是同步的,就是在提交了一系列的操作给操作系统后,需要阻塞监听等待事件的发生,如果有事

2016-03-07 12:40:07

安捷伦设备编程

l 信号功率分为三种:CW波功率、脉冲波功率、包络波功率l 脉冲波功率要求脉冲是有周期,如果没有周期,则测的不准l SCPI命令查询结果有3种方式:MEASure、READ、FETCH。FETCH不用等待count完成就取平均数,READ和MEASure都要等。READ可以指定count值,MEASure不可以。l 功率计有三种触发模式:Free Run、Single Shot、Continuou

2016-03-05 20:43:06

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!