自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 资源 (1)
  • 收藏
  • 关注

原创 perf在Ubuntu上的安装

perf是一个强大的性能分析和优化工具,高于2.6.31的内核都支持。安装perf,首先安装内核源码:sudo apt-get install linux-source。完成之后,可以再/usr/src下找到src,解压,进入tools/perf,然后make&&make install即可。参考:http://www.brendangregg.com/perf.htm

2015-07-01 01:51:48 15179 3

原创 mysql在Ubuntu上的安装

一直想着要了解一下mysql数据库,现在编译器的研究终于告一段落,正式动手搞起来。今天就从源码的下载,安装开始,个人使用的Ubuntu14.04。1,首先,下载最新的源码: wget http://mysql.mirror.kangaroot.net/Downloads/MySQL-6.0/mysql-6.0.11-alpha-linux-x86_64-glibc23.tar.gz

2015-06-25 17:54:54 830

原创 lcc源代码解析之x86后端

在前面的文章中已经介绍过,lcc中跟硬件平台相关的配置由src中*.md配置,本文以x86为例,详解这一部分的工作机制。熟悉汇编的同学都知道32位x86机器有八个通用寄存器:eax ebx ecx edx esi edi esp ebp而ebp和esp两个寄存器是有固定作用的,其保存的帧指针和栈指针是组成栈帧的基本组成部分,所以这两个寄存器不参与分配。在x86.md的最下面

2015-06-07 22:54:47 1616

原创 lcc源代码解析之gen.c

代码生成器是编译器中的一个非常重要的模块,

2015-06-03 23:33:41 1254

原创 lcc源代码解析之dag.c

有向无环图(dag)通常被用作编译器中存储代码的数据结构,在lcc中也不例外。

2015-06-03 20:56:49 1174

原创 lcc源代码解析之tree.c

这个小模块主要描述一种树状抽象的数据结构,这个数据结构用于存储源代码初步分析之后的结果。

2015-05-25 17:05:32 806

原创 lcc源代码解析之stat.c

前面的章节里已经解析了表达式部分,在理解了表达式的基础上,现在更进一步来理解语句。在C语言中,语句(statement)是一个比表达式(expression)更高粒度的存在,也即表达式是语句的组成成分。具体的C语言语法格式如下:statement:ID:statementcase constant-expression:statementdefault:statement

2015-05-24 22:11:38 1274

原创 value the essential life

value the essential life

2015-05-24 16:46:02 448

转载 Lisp的前世今生

一、如果我们把流行的编程语言,以这样的顺序排列:Java、Perl、Python、Ruby。你会发现,排在越后面的语言,越像Lisp。Python模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能,也一起模仿了。至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。二、1958年,J

2015-04-30 09:07:05 637

转载 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

转自:http://www.cnblogs.com/panxueji/archive/2013/05/12/3073924.html作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~

2015-04-24 13:56:07 2514

原创 带外数据(out-of-band data)

带外数据(out-of-band data)是 很多传输层都有的概念,也称经加速数据(expedited data)。其核心作用是在于连接的某端发送了重要的事情,这些信息需要以更高优先级(要比已经排队等待发送的普通数据更快的发送给对端)发送出去。带外数据并不要求在服务器和客户之间再建立一个连接,而是被映射到已有的连接中

2015-04-20 19:37:21 1886

原创 ld.linux.so源码分析--_dl_start_final

/* This is the second half of _dl_start (below).  It can be inlined safely   under DONT_USE_BOOTSTRAP_MAP, where it is careful not to make any GOT   references.  When the tools don't permit us to

2015-04-15 09:15:09 2679 1

原创 ld.linux.so源码分析--dl_main

本章分析ld.so的主体dl_main,这个函数非常复杂,只论篇幅就占了这个c文件的一半以上。static voiddl_main (const ElfW(Phdr) *phdr,ElfW(Word) phnum,ElfW(Addr) *user_entry){  const ElfW(Phdr) *ph;  enum mode mode;  str

2015-04-13 15:59:55 4334

原创 ld.linux.so源代码分析--RTLD_START

之前在研究动态连接的时候,原本打算从头到尾分析下linux下动态链接器ld.linux.so的源代码,但是当时工作上比较忙,未能完成这一任务,只写了一篇介绍ld.so自举的blog。最近打算重新开始这一任务,详细的分析下这份代码。首先,很多人认为这份代码应该belongs to内核,但是实际上这跟编译一样,属于用户态程序,由glibc提供,核心代码在elf/rtld.c中。这些代码的理

2015-04-13 11:32:05 3262

原创 网络编程练习-RAW套接字

RAW套接字能提供TCP和UDP所不能提供的以下三个功能:1,读写ICMP和IGMP分组,如果ping程序和多播路由守护程序mrouted就是使用raw套接字。2,读写内核不处理其协议字段的IPv4数据报。3,自行构造IPv4首部。

2015-04-10 17:17:10 750

原创 网络编程练习-key套接字

密钥管理套接字支持三种类型的操作:1,应用进程可以通过key套接字往内核以及其他打开着密钥套接字的所有其他进程发送消息2,应用进程可以通过key套接字从内核或其他进程接收消息。3,通过发送dump请求使内核dump出当前的SADB(security policy database)。

2015-04-07 13:43:35 524

原创 网络编程练习-路由套接字

路由套接字主要是为了操作内核中的路由子系统而创建,它提供以下功能:1,进程可以通过路由套接字读取内核信息,获取类似ICMP重定向等信息(需root权限)。2,进程可以通过路由套接字发送消息给内核,用来增加或者删除路径(需root权限)。3,进程可以通过sysctl倾泻路由表或列出所有已配置的接口。数据链路层套接字地址结构#include struct sockadd

2015-03-30 21:26:32 1370

原创 网络编程练习-ioctl

ioctl是一个非常重要的POSIX接口,可以执行非常多的操作。ioctl可以对文件,设备节点,套接字等多种资源进行操作,甚至在某些情况下可以作为一个数据传输接口(当然,需要驱动里给予支持)。其函数原型如下:#include int ioctl(int fd, int request, .../* void *arg*/);//第三个参数一般为一个指针,其类似依赖于第二个参数re

2015-03-30 18:48:50 682

原创 网络编程练习-广播和多播

广播的用途:1,资源发现,在本地子网中定位一个服务器主机。2,在有多个客户与单个服务器通信的局域网环境中尽量减少分组流通。广播地址:1,多播支持在IPv4中是可选的,在IPv6中是必需的。2,IPv6不支持广播,使用广播的IPv4应用程序一旦移植到IPv6就必须要用多播重写。3,广播和多播要求用于UDP或原始IP,他们不能用于TCP。

2015-03-29 23:15:42 567

原创 网络编程联系-高级I/O

除了read/write函数之外,POSIX还为socket提供了其他的I/O接口。1,recv&send函数原型:#include ssize_t recv(int sockfd, void* buf, size_t nbytes, int flags);ssize_t send(int sockfd, const void *buf, size_t nbytes, int f

2015-03-29 22:00:55 469

原创 网络编程练习-unix域套接字

unix域协议并不是一个实际的协议族,而是一种用在单个主机中进程间通信的方式。unix域提供两类套接字:字节流套接字(类似TCP)和数据报套接字(类似UDP)。除了用于常用的进程间通信,还可用于在在不同进程中间传递描述符。unix域套接字也可以将客户的凭证(用户ID和组ID)提供给服务器,从而能够提供额外的安全检查措施。 /*****************************

2015-03-27 15:23:36 469

原创 网络编程练习-名字与地址转换

主机名字与IP地址之间的映射由DNS(域名系统,Domain Name System)完成。DNS中的条目称为资源记录(resource record, RR),其中包括以下字段A               记录一个主机名映射的32位IPv4地址。AAAA       记录一个主机名映射的128位IPv6地址。PTR           把IP地址映射成主机名。       

2015-03-26 21:34:41 632

原创 网络编程练习-UDP套接字

网络编程练习

2015-03-26 20:29:06 499

原创 网络编程练习-fcntl

函数原型(linux man page):fd:套接字文件描述符(用于操作套接字时,可以用于操作其他文件)cmd:对于每一个套接字描述符,都有一个组F_GETFL&F_SETFL的cmd。后面的可变参数为具体设置值。对于socket,fcntl可以设置IO方式(是否阻塞,信号驱动式IO),设置&获取套接字属主(套接字的进程组ID)。当然,另外一个posix接口ioctl

2015-03-26 17:09:29 456

原创 网络编程练习-setsockopt&getsockopt

能设置和获取套接字选项的主要有以下几类函数:

2015-03-25 23:30:59 1943

原创 网络编程练习-TCP socket

Server端:#include #include #include #include int main(int argc, char* argv[]){ int sockfd = socket(AF_INET, SOCK_STREAM, 0); if(!sockfd){ fprintf(stderr, "socket creat error. \n"); return

2015-03-25 17:13:57 589

原创 SMTP 简单邮件传送协议

用TCP进行的邮件交换是由报文传送代理MTA完成的。最普通的Unix系统的MTA是Sendmail。两个MTA之间用NVT ASCII进行通信,客户向服务器发出命令,服务器用数字应答码和可选的人可读字符串进行响应。SMTP命令:HELOMAIL:RCPTDATAQUITRSETVRFYNOOPEXPNTURN

2015-03-21 21:05:37 890

原创 FTP 文件传输协议

FTP是用于文件传输的internet标准。FTP采用两个TCP连接来传输一个文件:1,控制连接以通常的客户服务器方式建立,服务器被动打开21号端口,客户主动打开21端口,并于服务器的21号端口建立连接。2,每启动一个文件的传输,就创建一个新的数据连接。其传输模型如下图:FTP提供了控制文件传输和存储的多种选择,在以下四个方面中的每一个都必须做出一个选择:每

2015-03-21 20:35:10 913

原创 SNMP 简单网络管理协议

基于TCP/IP的网络管理主要为两个部分:1,网络管理站(manager),显示所有被管理设备的状态,也称管理进程。2,被管理设备(agent):包括路由器,终端机,打印机等,也称代理进程。二者之间的通信可以有两种方式:1,管理进程向代理进程发出请求,查询或者修改一个具体的参数值。2,代理进程主动向管理进程上传发送的重要事件,以便于管理进程修改代理进程的相关参数。

2015-03-21 17:24:21 663

原创 TCP的交互数据流与成块数据流

TCP的交互数据流与成块数据流

2015-03-20 16:53:20 510

原创 TCP的超时和重传

TCP提供可靠的运输层。其主要途径就是确认从另一端收到的数据。同时确认也需要传输,故而也存在丢掉的可能。TCP通过在发送时设置一个定时器来解决这种问题:如果定时器溢出还没有收到确认,重传该数据。对于每个连接,TCP管理4个不同的定时器。1,重传定时器用于希望收到对端的确认。2,persist定时器使窗口大小信息保持不断流动,即使另一端关闭了其接受窗口。3,keepalive

2015-03-20 16:53:04 631

原创 TCP 传输控制协议

与UDP不同,TCP提供面对连接的,可靠的字节流服务。TCP协议通过以下方式来提供可靠性:1,应用数据被分割成TCP因为最合适发送的数据块,由TCP传递给IP的信息单位称为报文段或段(segment)。2,当TCP发出一个段之后,它启动一个timer并等待,如果确认回收超时,将重发此报文段。3,一端收到另一端的数据,它将发送一个确认,并不立即发送,通常推迟几分之一秒。4,TCP

2015-03-17 19:56:00 566

原创 TFTP 简单文件传输协议

TFTP基于UDP,通常用于引导无盘系统。TFTP报文的头两个字节表示操作码,依据此操作码(从1到5),TFTP有五种不同的报文格式,格式如下:1,如果是读请求或者写请求,文件名字段说明客户要读或写的位于服务器的上的文件并以0字节作为结束,模式字段是一个ASCII码串netascii或octet,同样以0字节结束。netascii表示数据是以成行的ASCII码字符组成,以C

2015-03-17 14:41:17 2586

原创 DNS 域名系统

DNS是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。对DNS的访问是通过一个地址解析器来完成的,在*nix主机中,主要通过两个库函数gethostbyname和gethostbyaddr来访问。DNS的名字空间与*nix文件系统类似,也具有层次结构,其结构如下图:每个节点有一个至多63个字符长得标示,根是没有任何标示的

2015-03-17 13:36:10 628

原创 广播和多播

广播和多播将报文同时将报文传往多个接受者,所以无法适用于基于连接的协议(TCP),只能应用于UDP。

2015-03-17 10:46:09 401

原创 UDP:用户数据报协议

UDP是一个简单的面向数据报的传输层协议,进程的每个输出操作都正好产生一个UDP数据报,并组装一份待发送的IP数据报。与TCP不同,app产生的全体数据与真正发送的单个IP数据报没什么关系。UDP不提供可靠性:只发送数据,并没有保证措施确保他们能到达目的地。UDP封装结构如下:UDP首部共八个字节,分为4个16bit的字段,分别表示源端口号,目的端口号,UDP长度(最小8b

2015-03-16 16:59:57 791

原创 ARP地址解析协议与RAPR逆地址解析协议

ARP地址解析协议与RAPR逆地址解析协议

2015-03-15 17:36:05 4720

原创 ICMP:Internet控制报文协议

ICMP传递差错报文以及其他需要注意的信息,通常被IP层或传输层使用。ICMP报文格式如下:所有ICMP报文的前4个字节是一样的,其他互不相同。类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICP报文还使用代码字段的值来进一步描述不同的条件。ICMP地址掩码请求用于误判系统在引导过程中获取自己的子网掩码。

2015-03-15 14:53:52 640

原创 数据链路层和网络层

IP路由选择

2015-03-13 16:31:13 2567

原创 glibc内存管理模块ptmalloc架构透析

之前写了一篇关于ptmalloc的malloc/free代码解析的博客,有同事看到说,在不熟悉ptmalloc架构的情况,即使注释写的再详细,也不是很好理解,建议再写一些架构介绍的博文,年前后这段时间一直在忙其他事情,打算最近抽出一些时间完成这个任务。ptmalloc的设计遵循以下原则:1,较大块的内存,占用周期长得内存使用mmap分配,使用时间短的内存使用brk,如果不了解brk和mma

2015-03-11 11:30:17 1246 1

4.2版本lcc编译器

Here you can download the lcc-win32 or the lcc-win64 C compiler system. The system is self contained: you do not need anything else to get started programming in C in the Win32 environment. You get 1. Code generator (compiler, assembler, linker, resource compiler, librarian) 2.Integrated development environment with editor, debugger, make file generation, resource editor, etc. 3. User manual and technical documentation

2014-09-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除