当前位置:  开发笔记 > 运维 > 正文

从C访问网络数据包中未对齐数据的安全有效方法

如何解决《从C访问网络数据包中未对齐数据的安全有效方法》经验,为你挑选了1个好方法。

我正在用ARM9处理器编写C for Linux程序.该程序用于访问网络数据包,其中包括一系列标记数据,如:

 ...

fieldID和length字段都是uint16_t.数据可以是1个或更多字节(如果使用全长,则最多64k,但事实并非如此).

只要有一个偶数个字节,我就没有看到问题.但是,如果我有一个1或3或5字节的部分,那么下一个16位fieldID最终不会出现在16位边界上,我预计会出现对齐问题.已经有一段时间了,因为我从头开始做了这样的事情,所以我对细节不太了解.任何反馈欢迎.谢谢.



1> Greg Hewgill..:

为避免在这种情况下出现对齐问题,请将所有数据作为unsigned char *.所以:

unsigned char *p;
//...
uint16_t id = p[0] | (p[1] << 8);
p += 2;

上面的示例假定为"little endian"数据布局,其中最低有效字节首先出现在多字节数字中.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有