C语言网络编程和跨平台代码安全性的示例分析
创始人
2024-12-25 21:23:06
0次

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设备做适配又是不一件不可能的事。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...