本篇文章给大家分享的是有关C语言网络编程和跨平台代码安全性的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
C语言语法简洁,但内涵丰富。对一个聪明的人来说,可能几个小时就能学会使用C语言,但可能一辈也很难成为大师。C语言处处隐藏陷阱,没有阅读过大量优秀代码,没有思考过大师专家级代码的特别之处,没有写了过大量应用程序,写的程序中往往容易不经意间隐藏地雷。一旦爆发,系统被炸的面目全非。
兹摘抄一个知名公司系统中的代码研究
1. 移位陷阱
公司的大牛在写一个base64编解码程序时,使用了如下方法:
staticvoid encodeblock( unsigned char *in, unsigned char *out, int len )
{
out[0] = (unsigned char) cb64[ (int)(in[0]>> 2) ];
out[1] = (unsigned char) cb64[ (int)(((in[0]& 0x03) << 4) | ((in[1] & 0xf0) >> 4)) ];
out[2] = (unsigned char) (len > 1 ? cb64[(int)(((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6)) ] :'=');
out[3] = (unsigned char) (len > 2 ? cb64[(int)(in[2] & 0x3f) ] : '=');
}
这在本系统中不错,但却隐藏着很大的风险,系统是做为基础的加密工具给公司各种各样的嵌入式设备使用,这里隐藏着一个数组越界的地雷。(int)(in[0] >> 2)如果不&0x3f,在不同编绎器环境下,右移位后,左边空拉有些是填充零,有些时填充1,有些是填充最高符号位,这样就会导致不同系统的加密出现数据一不致性,有时会溢出。
2. 对齐陷阱
Sizeof是在C语言里经常使用的方法,有人把归为运算符,其他他计算结构体变量的指针偏移相当方便,有很多书推荐,因为他计算基础类型变量时能根据系统和编绎器不同自动计算调整,具有很强的自适应性和跨平台能力,但这种自适合性在单机程序中是很牛X,不过有不同系统交互时,会存在数据不一致。不同系统或者编程语言会把同样结构转为不同的byte流,这种情况下,数据传输交互就会失去一致性。而且我们的系统使用C语言,java作为客户端,而java是没有结构体的,只能把对象的成员根据系统大小自拼接,c语言老手建议我在java端对C系统做适配,在java端做一个类似C结构对齐的操作,这是一个很复杂的工程,C语言端是二字节对齐还是四字节对齐不要猜测,要针对不同的C设备做适配又是不一件不可能的事。
以上就是C语言网络编程和跨平台代码安全性的示例分析,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。