自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 磨刀不误砍柴工

这是一句广为流传的俗语,表面意思就是磨刀并不会耽误砍柴的时间,在软件开发过程中,似乎也有同样的情况出现。有的时候,项目为了赶进度,需要快速实现,于是我们就马不停蹄的加班加点的去写代码了,其他周边的功夫能少耽误就少耽误,但是是不是除了写代码,其他什么事情都可以省

2011-07-05 20:56:49 1028

原创 火车运煤问题

昨天在网上看到一个有意思的数学题目,想了一会儿,没想到用数学方法来解决它,最后试了下程序来计算。 题目如下: 两地A,B相距1000公里,一列火车运能是1000吨煤,没前进一公里需要消耗1吨煤。现在有3000吨煤需要从A运到B,如何运才能使最后到达B地的煤最多? 初看似乎无解,1公里消耗1吨煤,1000吨煤达到B地就没了。在看这道题的时候,下面有一个简单的解决方法。 先运1000吨到250公里处,返回,在运1000到250公里处,三次以后,到达250公里处的煤是1750吨。然后在前进250公里,此时

2011-05-03 17:39:00 3059

原创 openssl 代码分析(6) SSL_connect

SSL_connect函数会负责完成ssl handshake过程,那么我们来看看他是怎么实现的。 SSL_connect函数本身的code非常简单,只有短短几行,但是最后通过函数指针调用来实现它的功能。这个函数指针是s->method->ssl_connect,此处method即为之前介绍的初始化到SSL_Ctx中的method。我们就看看常用的SSLv3的method, SSLv3_client_method。在SSLv3_client_method里面,首先会将method初始化为一个base的ss

2011-03-27 19:35:00 17378

原创 openssl代码分析(5) ssl库

之前简单分析了crypto库,主要是针对常用的x509相关的code,其他的像pkcs7,pkcs12这样的都非常类似,熟悉ASN1的话,那么对代码的理解会比较容易,所以也就不再赘述了。 对于ssl库,我想最重要的就是搞清楚ssl handshake的code,清楚handshake过程和代码的对应关系。 要搞清楚上面所说的关系,了解怎么利用openssl来写自己的ssl应用也是一个起步,所以首先把着手点放在s_server和s_client这2个openssl的app上,参照这2个app就可以很轻松的

2011-03-19 23:42:00 8586 1

原创 另外一个阅读openssl code的tip

由于openssl代码非常复杂,尤其是用到了非常多不太常用的C技巧,像n多的宏定义,使得我们在查找一些函数,变量定义的时候非常麻烦,无论什么样的代码工具都没法定位到函数的原始定义处。 对于通过宏来定义的函数和变量,如果我们去一层层的将宏扩展开来分析,将会是非常麻烦的,就像我之前所作的那样,需要不少的时间,而且有的时候不一定对。 幸好编译器在预编译阶段已经帮我们将所有的宏都展开,所以我们可以利用这一点来获取预编译的结果。 对于MSVC的编译器CL,有一个选项/P可以将预编译的结果写到一个文件中,如xxx

2011-03-13 19:56:00 2669 1

原创 openssl 代码分析(4) ASN1_item_ex_d2i

ASN1_item_ex_d2i的参数 pval: 由caller传入,用于接收返回值。 in: 由caller传入,是输入字符串,待decode的buffer len:待decode buffer的长度 it: X509_it tag: –1 aclass: 0 opt: 0 ctx: caller的local variable,已经clear,其valid field为0. 展开 ASN1_SEQUENCE_ref(X509, x509_cb,

2011-03-13 12:28:00 6199

原创 在windows上用visual stdio debug openssl

为了方便分析openssl的code,单步的debug也许是一个不错的方式,这样可以很清楚的看到每一步各个变量的值,相关的状态,尤其是通过IDE工具的debug,对于gdb不熟的同学来说绝对是非常的方便。 openssl可以在windows下编译,所以当然也能在windows下用VS debug。但是因为openssl的编译是通过Makefile的方式,不是建了一个VS的solution,所以不能很方便的可视化的加个断点,然后F5就开始debug。但是VS的断点原理也很简单,就是插入一条软件中断的汇编,于

2011-03-08 20:55:00 2860

原创 openssl 代码分析(3) 深入d2i_x509

首先是几个结构体的定义 struct ASN1_TLC_st{     char valid;    /* Values below are valid */     int ret;    /* return value */     long plen;    /* length */     int ptag;    /* class value */     int pclass;    /* class value */     int hdrlen;    /

2011-03-05 23:13:00 16082

原创 openssl 代码分析(2)----i2d和d2i系列函数

在openssl crypto库中,有很多形似i2d_xxx和d2i_xxx的函数,而且用source insight这样的代码浏览工具是没法找到其定义的,在我刚刚接触openssl的时候,着实郁闷了一阵子,就是找不到定义。后来才发现了这一系列函数的来源。原来他们是通过宏定义的方式来实现的。 在asn1.h中,有一系列的宏定义,其中DECLARE_ASN1_ENCODE_FUNCTIONS就是用于d2i和i2d的原型。 #define    DECLARE_ASN1_ENCODE_FUNCTIONS(t

2011-03-01 10:58:00 13250 2

原创 openssl 代码分析(1)

openssl支持的平台非常多,至少我就在windows,linux,以及mips上编译且运行过。而且按照openssl的整个设计,我想移植到任何平台都是没有多少障碍的,openssl已经很好的将平台依赖的部分独立开来,通过callback的方式来实现。比如内存分配函数,malloc,free等,就可以通过CRYPTO_set_mem_functions函数将目标平台的内存分配函数指针传入,这样openssl所有的内存分配就会最终调入到用户传入的函数里面。其他类似的callback机制还有很多,包括为了多任

2011-02-27 18:45:00 13048 2

原创 测试windows live writer发布

看上去还不错!

2011-02-27 18:08:00 622

原创 准备写点openssl的代码分析

<br />这几年因为工作于SSLVPN,DPISSL,所以接触openssl比较多。openssl的code还是满复杂的,直到现在也没能完全搞懂,所以很想借写点博客对他来一次比较全面的分析,也好记录下来,以便以后查阅。<br /> <br />openssl的官方网站是openssl.org,code可以通过cvs下载,也可以直接下载源代码包。我想分析的版本是openssl 0.97d。

2011-02-18 22:49:00 860

原创 VIM tips

v/:* {behavior:url(#default#VML);}o/:* {behavior:url(#default#VML);}p/:* {behavior:url(#default#VML);}.shape {behavior:url(#default#VML);}v/:textbox {display:none;}Slide 1.O {color

2008-09-02 16:56:00 676 2

原创 Chord实现代码分析(二)

  在前面的分析中,漏掉了对chord初始化的时候是第三个参数的分析,难怪觉得似乎少了些东西。对于chord,第三个参数是一个函数指针---- fingerroute::produce_vnode(对此的描述是use fingers and successors)原来此方法是用于构建fingertable的,对于chord算法来说是相当关键的一部分。现在深入该函数进行分析,看看chord是如何

2007-01-17 17:28:00 2210 1

原创 Chord实现代码分析(一)

最近工作需要研究chord代码实现,干脆就把我的理解发到blog上,希望大家能指教错误和不足之处!  本人所用的代码为包含在SFSNet里的部分,目录为SFSNet/chord,里面包括了chord算法的主要实现。当然,如果要完全看懂代码,尤其是关于里面用到的很多refcounted,list等等,那么必须下载另外一份代码----sfslite2,这里面包括了sfsnet要用到的一些常

2007-01-17 09:15:00 3742 4

原创 Chord代码分析(一)

 最近在研究Chord算法,需要看看其具体实现,所以就把自己看代码的见解写在这里,一来便于查阅,二来可以得到大家的指正,欢迎讨论mail:[email protected] yahoo:[email protected]这是今天完成的第一部分代码的阅读小结,欢迎多指教。本人所用的代码为包含在SFSNet里的部分,目录为SFSNet/chord,里面包括了chord算法

2007-01-16 18:05:00 2646

原创 linux下批量处理文件内容

最近因为要做linux下的CGI程序,所以需要把html变成c代码,就得在每句html语句之前加printf打印,html文件蛮多的,如果是要手写的,就太慢了,于是就希望能找到自动化的东西,也相信肯定很多,因为总不至于是我最先遇到这样的问题吧,于是开始在网上搜索。刚开始是极希望于VI,vi有个visual模式,能对block进行操作,但是试了一下,发现不行,于是只能继续找,后来总算找到了好点的办法

2007-01-13 16:18:00 1318

原创 blog开张了

马上上班了,开始在blog上写点自己的技术,生活方面的体会了。希望这里能成为我交流技术,认识朋友的一个好场所,希望大家多多捧场,谢谢! 

2007-01-13 16:11:00 573

空空如也

空空如也

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

TA关注的人

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