无名

让内心永远燃烧着伟大的光明的精神之火!
灵活的思考,严谨的实现
豪迈的气魄、顽强的意志和周全的思考

eSNACC学习

深入剖析eSNACC源代码!
eSNACC的C运行时库动态内存管理
     摘要: 本文研究eSNACC的C运行时库动态内存管理。

eSNACC的运行时库和代码生成用的内存管理函数用的是统一的宏定义原型,但是支持用户自己配置内存管理方案。eSNACC本身提供两种内存管理方案:

一个是mem.h/c定义的直接分配;另一个是nibble-alloc.h/c定义的Nibble memory系统。
  阅读全文

posted @ 2012-04-27 15:42 Tim 阅读(284) | 评论 (0)  编辑

剖析eSNACC的hash函数
     摘要: 我们前面已经写了一篇文章剖析eSNACC哈希结构的设计和实现 剖析eSNACC哈希结构的设计和实现 ,而本篇我们专门剖析eSNACC中的hash函数。  阅读全文

posted @ 2012-04-26 15:37 Tim 阅读(1407) | 评论 (2)  编辑

剖析eSNACC哈希结构的设计和实现
     摘要: 本文剖析hash.h/c,从源代码来剖析eSNACC哈希结构的设计和实现。

为什么要在这里剖析hash呢?一个顺理成章的理由是:我们准备剖析eSNACC对ANY(s)类型的编码和解码,可是ANY的实现依赖于hash,所以我们就需要先把这条路打通了。O(∩_∩)O哈哈~是不是很有说服力呀?

好,闲话少述,言规正传。我们知道hash对一个系统而言,一般都是一个很有价值的底层基础设施。从作用上来说,他实现的优劣极大的影响着整个系统的性能。从技术上来说,也是很能体现含金量的一个模块。所以,对eSNACC实现的这个宝藏,我们下定决心要刨根问底、直捣黄龙!
  阅读全文

posted @ 2012-04-26 15:36 Tim 阅读(1534) | 评论 (1)  编辑

eSNACC对ASN.1 constructors的处理
     摘要: 首先让我们来学习一下ASN.1的Constructors类型 。
然后我们来研究eSNACC的C代码生成和C运行时库对ASN.1 constructors的处理办法。
  阅读全文

posted @ 2012-04-25 15:01 Tim 阅读(1430) | 评论 (2)  编辑

eSNACC对OBJECT IDENTIFIER的编码和解码
     摘要: 本文剖析asn-oid.h/c,从源代码来学习eSNACC对OBJECT IDENTIFIER的编码和解码。

在研究代码之前,我们先来说明什么是OBJECT IDENTIFIER。

  阅读全文

posted @ 2012-04-24 16:30 Tim 阅读(1344) | 评论 (0)  编辑

eSNACC对ASN.1内置字符串的编码和解码
     摘要: eSNACC运行时库直接支持各种各样的ASN.1字符串定义。这包括PrintableString, BMPString, TeletexString, NumericString, IA5String, UniversalString, UTF8String, VisibleString。其做法也大同小异,所有这些字符串都是在eSNACC的字节串基础上typedef过来的,只是根据各自特性的不同而在编码解码时有某些判断,或者加了某些判断函数等。只有UTF8String相对比较复杂一些。让我们一起来分析一下吧。

  阅读全文

posted @ 2012-04-24 11:41 Tim 阅读(500) | 评论 (1)  编辑

eSNACC对OCTET STRING 的编码和解码
     摘要: 本文剖析asn-octs.h/c,从源代码来学习eSNACC对OCTET STRING的编码和解码。

eSNACC对字节串OCTET STRING的处理与上一篇描述的比特串的方法类似,而且字节串的处理更加简单。所以在上一篇的基础上,我们专门分析上一篇中对连接型串解码时没有展开讲的函数,也作为上一篇的补充。  阅读全文

posted @ 2012-04-23 16:22 Tim 阅读(2606) | 评论 (0)  编辑

eSNACC对BIT STRING的编码和解码
     摘要: 本文剖析asn-bits.h/c,从源代码来学习eSNACC对BIT STRING的编码和解码。

比特字符串的编码和解码比较复杂,而且我认为还存在一些问题,我们来仔细分析一下代码吧。

  阅读全文

posted @ 2012-04-22 18:20 Tim 阅读(422) | 评论 (3)  编辑

eSNACC对INTEGER的编码和解码
     摘要: 本文剖析asn-int.h/c,从源代码来学习eSNACC对INTEGER的编码和解码。

eSNACC中的整形与上一篇所讲的布尔型一样,也很简单,不过代码中还是有一点有趣的地方。
  阅读全文

posted @ 2012-04-20 17:26 Tim 阅读(1400) | 评论 (4)  编辑

eSNACC对BOOLEAN的编码和解码
     摘要: 本文剖析asn-bool.h/c,从源代码来学习eSNACC对BOOLEAN的编码和解码。  阅读全文

posted @ 2012-04-20 15:55 Tim 阅读(151) | 评论 (0)  编辑

eSNACC对长度的编码和解码
     摘要: 本文剖析asn-len.h/c,从源代码来学习eSNACC对长度的编码和解码。
在正式引出源代码之前,我觉得非常有必要强调几点非常重要的知识:
1、eSNACC编译器对数据的编码设计是反序的,也就是先编码数据并写进缓冲区,以此而知道了编码好的数据长度,然后再将本长度值编码插到缓冲区前面。这样设计的目的是减少性能的损失。而很多其他编译器是开一个临时缓冲区来完成这个工作,这就带来了性能的损失。详细的说明,请参加eSNACC文档。我们要记住的是eSNACC编码时反序的。
2、eSNACC既支持确定长度编码也支持不确定长度编码。原理是:确定长度编码,那么在数据之前的若干字节来表面后面数据的长度;若为不确定长度编码,那么数据前面的长度字节为0x80,此代表长度不确定,然后在数据最后用EOC(End-Of-Contents)来表示数据的结束。
3、eSNACC支持BER和DER编码。不过BER允许不确定长度,但是DER只支持确定长度,所以在他们的编码解码函数上有所不同。
4、如果感觉代码中的PROTO和PARAMS很陌生,请读本系列中的《关于老式函数声明》一  阅读全文

posted @ 2012-04-20 11:00 Tim 阅读(1379) | 评论 (0)  编辑

关于老式函数声明
     摘要: #ifdef __USE_ANSI_C__
#define PROTO( X) X
#else /* !__USE_ANSI_C__ */
#define PROTO( X) ()
#endif /* __USE_ANSI_C__ */  阅读全文

posted @ 2012-04-19 16:46 Tim 阅读(312) | 评论 (0)  编辑

<2018年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

公告

本博客原创文章,欢迎转载和交流。不过请注明以下信息:
作者:TimWu
邮箱:timfly@yeah.net
来源:www.cppblog.com/Tim
感谢您对我的支持!

留言簿(9)

随笔分类(173)

IT

Life

搜索

积分与排名

最新随笔

最新评论

阅读排行榜