- 博客(18)
- 收藏
- 关注
原创 磨刀不误砍柴工
这是一句广为流传的俗语,表面意思就是磨刀并不会耽误砍柴的时间,在软件开发过程中,似乎也有同样的情况出现。有的时候,项目为了赶进度,需要快速实现,于是我们就马不停蹄的加班加点的去写代码了,其他周边的功夫能少耽误就少耽误,但是是不是除了写代码,其他什么事情都可以省
2011-07-05 20:56:49
1051
原创 火车运煤问题
昨天在网上看到一个有意思的数学题目,想了一会儿,没想到用数学方法来解决它,最后试了下程序来计算。 题目如下: 两地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
3083
原创 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
17484
原创 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
8624
1
原创 另外一个阅读openssl code的tip
由于openssl代码非常复杂,尤其是用到了非常多不太常用的C技巧,像n多的宏定义,使得我们在查找一些函数,变量定义的时候非常麻烦,无论什么样的代码工具都没法定位到函数的原始定义处。 对于通过宏来定义的函数和变量,如果我们去一层层的将宏扩展开来分析,将会是非常麻烦的,就像我之前所作的那样,需要不少的时间,而且有的时候不一定对。 幸好编译器在预编译阶段已经帮我们将所有的宏都展开,所以我们可以利用这一点来获取预编译的结果。 对于MSVC的编译器CL,有一个选项/P可以将预编译的结果写到一个文件中,如xxx
2011-03-13 19:56:00
2704
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
6237
原创 在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
2906
原创 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
16147
原创 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
13333
2
原创 openssl 代码分析(1)
openssl支持的平台非常多,至少我就在windows,linux,以及mips上编译且运行过。而且按照openssl的整个设计,我想移植到任何平台都是没有多少障碍的,openssl已经很好的将平台依赖的部分独立开来,通过callback的方式来实现。比如内存分配函数,malloc,free等,就可以通过CRYPTO_set_mem_functions函数将目标平台的内存分配函数指针传入,这样openssl所有的内存分配就会最终调入到用户传入的函数里面。其他类似的callback机制还有很多,包括为了多任
2011-02-27 18:45:00
13085
2
原创 准备写点openssl的代码分析
<br />这几年因为工作于SSLVPN,DPISSL,所以接触openssl比较多。openssl的code还是满复杂的,直到现在也没能完全搞懂,所以很想借写点博客对他来一次比较全面的分析,也好记录下来,以便以后查阅。<br /> <br />openssl的官方网站是openssl.org,code可以通过cvs下载,也可以直接下载源代码包。我想分析的版本是openssl 0.97d。
2011-02-18 22:49:00
873
原创 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
686
2
原创 Chord实现代码分析(二)
在前面的分析中,漏掉了对chord初始化的时候是第三个参数的分析,难怪觉得似乎少了些东西。对于chord,第三个参数是一个函数指针---- fingerroute::produce_vnode(对此的描述是use fingers and successors)原来此方法是用于构建fingertable的,对于chord算法来说是相当关键的一部分。现在深入该函数进行分析,看看chord是如何
2007-01-17 17:28:00
2232
1
原创 Chord实现代码分析(一)
最近工作需要研究chord代码实现,干脆就把我的理解发到blog上,希望大家能指教错误和不足之处! 本人所用的代码为包含在SFSNet里的部分,目录为SFSNet/chord,里面包括了chord算法的主要实现。当然,如果要完全看懂代码,尤其是关于里面用到的很多refcounted,list等等,那么必须下载另外一份代码----sfslite2,这里面包括了sfsnet要用到的一些常
2007-01-17 09:15:00
3762
4
原创 Chord代码分析(一)
最近在研究Chord算法,需要看看其具体实现,所以就把自己看代码的见解写在这里,一来便于查阅,二来可以得到大家的指正,欢迎讨论mail:hudaiqian@gmail.com yahoo:hudaiqian@yahoo.com.cn这是今天完成的第一部分代码的阅读小结,欢迎多指教。本人所用的代码为包含在SFSNet里的部分,目录为SFSNet/chord,里面包括了chord算法
2007-01-16 18:05:00
2669
原创 linux下批量处理文件内容
最近因为要做linux下的CGI程序,所以需要把html变成c代码,就得在每句html语句之前加printf打印,html文件蛮多的,如果是要手写的,就太慢了,于是就希望能找到自动化的东西,也相信肯定很多,因为总不至于是我最先遇到这样的问题吧,于是开始在网上搜索。刚开始是极希望于VI,vi有个visual模式,能对block进行操作,但是试了一下,发现不行,于是只能继续找,后来总算找到了好点的办法
2007-01-13 16:18:00
1329
原创 blog开张了
马上上班了,开始在blog上写点自己的技术,生活方面的体会了。希望这里能成为我交流技术,认识朋友的一个好场所,希望大家多多捧场,谢谢!
2007-01-13 16:11:00
582
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人