代码改变世界

随笔档案-2015年01月

关于linux系统如何实现fork的研究(一)

2015-01-30 17:22 by tolimit, 3779 阅读, 收藏, 编辑
摘要: 引言 fork函数是用于在linux系统中创建进程所使用,而最近看了看一个fork()调用是怎么从应用到glibc,最后到内核中实现的,这片文章就聊聊最近对这方面研究的收获吧。我们主要聊聊从glibc库进入内核,再从内核出来的情景,而从应用到glibc这部分本片文章就不详细说明了。为了方便期间,我... 阅读全文

关于for,while,dowhile效率测试

2015-01-22 11:03 by tolimit, 4817 阅读, 收藏, 编辑
摘要: 引言 大家都知道每种循环对应的效率是不同的,书中都说在循环中使用减法的效率是比加法的效率高的,具体情况是怎么样,我们将详细列出各循环的执行效率问题。本文通过查看汇编代码比较各循环的效率以及i++,++i,i--,--i在循环中使用的效率问题,仅供抛砖引玉,测试平台为intel i5 4440,编译... 阅读全文

wifidog源码分析 - 认证服务器心跳检测线程

2015-01-20 10:19 by tolimit, 1687 阅读, 收藏, 编辑
摘要: 引言 但wifidog启动时,会自动启动认证服务器心跳检测线程,此线程默认每隔60s与认证服务器交互一次,会将路由器的信息(系统启动时长,内存使用情况和系统平均负载)告知认证服务器,并通过一个"ping"字符串作为信号,而当认证服务器接收到此数据包后,会返回一个"pong"给路由器,具体我们看看代... 阅读全文

wifidog源码分析 - 客户端检测线程

2015-01-19 10:53 by tolimit, 1612 阅读, 收藏, 编辑
摘要: 引言 当wifidog启动时,会启动一个线程(thread_client_timeout_check)维护客户端列表,具体就是wifidog必须定时检测客户端列表中的每个客户端是否在线,而wifidog是通过两种方式进行检测客户端在线情况,一种是定时通过iptables获取客户端出入总流量更新客户... 阅读全文

谈谈arm下的函数栈

2015-01-16 17:14 by tolimit, 3481 阅读, 收藏, 编辑
摘要: 引言 这篇文章简要说说函数是怎么传入参数的,我们都知道,当一个函数调用使用少量参数(ARM上是少于等于4个)时,参数是通过寄存器进行传值(ARM上是通过r0,r1,r2,r3),而当参数多于4个时,会将多出的参数压入栈中进行传递(其实在函数调用过程中也会把r0,r1,r2,r3传递的参数压入栈),... 阅读全文

wifidog源码分析 - 用户连接过程

2015-01-15 11:10 by tolimit, 4523 阅读, 收藏, 编辑
摘要: 引言 之前的文章已经描述wifidog大概的一个工作流程,这里我们具体说说wifidog是怎么把一个新用户重定向到认证服务器中的,它又是怎么对一个已认证的用户实行放行操作的。我们已经知道wifidog在启动时会删除iptables中mangle、nat、filter表中的所有规则,并在这三个表中添... 阅读全文

IO端口和IO内存

2015-01-14 15:23 by tolimit, 1181 阅读, 收藏, 编辑
摘要: 为什么会有IO端口和IO内存 这主要原因是因为处理器的架构不同,这里我们使用arm来代表典型的使用IO内存架构,intel 80x86代表典型的使用IO端口架构。简单来说arm把所有寄存器(包括外部设备的)、内存等所有需要寻址才能访问的东东全部丢到了一个地址空间中,而80x86则是分为了两个地址空... 阅读全文

wifidog源码分析 - wifidog原理

2015-01-14 12:34 by tolimit, 7565 阅读, 收藏, 编辑
摘要: wifidog是一个用于配合认证服务器实现无线网页认证功能的程序,常见的情景就是使用于公共场合的无线wifi接入点,首先移动设备会连接公共wifi接入点,之后会弹出网页要求输入用户名密码,认证过后才能够连入外网。其主页是http://dev.wifidog.org/实现原理 其实wifidog原理... 阅读全文

wifidog源码分析 - 初始化阶段

2015-01-13 16:35 by tolimit, 1820 阅读, 收藏, 编辑
摘要: Wifidog是一个linux下开源的认证网关软件,它主要用于配合认证服务器实现无线路由器的认证放行功能。wifidog是一个后台的服务程序,可以通过wdctrl命令对wifidog主程序进行控制。本文解释wifidog在启动阶段所做的初始化主要工作(代码片段1.1)初始化配置(先将配置结构体初始化... 阅读全文