1.字节序概念

字节序也称为字节顺序,在计算机中对数值的存储有一定的标准,而该标准随着系统架构的不同而不同。了解字节存储顺序对于逆向工程是一项基础知识,在动态分析程序的时候,往往需要观察内存数据的变化情况,这就需要我们在掌握数据的存储宽度、范围之后,进一
步了解字节顺序。
大尾存储方式:内存高位地址存放数据低位字节数据,内存低位地址存放数据高位字节数据;
小尾存储方式:内存高位地址存放数据高位字节数据,内存低位地址存放数据低位字节数据。
通常情况下,Windows 操作系统兼容的 CPU 为小尾存储方式,而 Unix 操作系统兼容的CPU 多为大尾存储方式。在网络中传输的数据的字节顺序使用的是大尾存储方式。

2.编程判断主机字符序

编程判断主机字节序是更进一步掌握字节序的方式,本小节给出两种对主机的字节序进行判断的方式。
2.1 字节序相关函数
在 TCP/IP 网络编程中会涉及关于字节序的函数,TCP/IP 协议中传递数据是以网络字节序进行传输的,网络字节序是指网络传输相关协议所规定的字节传输的顺序,TCP/IP 协议所使用的网络字节序与大尾方式相同。而主机字节序包含大尾方式与小尾方式,因此在进行网络传输时会进行相应的判断,如果主机字节序是大尾方式则无需进行转换即可传输,如果主机字节序是小尾方式则需要转换成网络字节序(也就是转换成大尾方式)然后进行传输。

  1. 常用的字节序涉及的函数有如下几个:
  2. u_short htons(u_short hostshort);
  3. u_long htonl(u_long hostlong);
  4. u_short ntohs(u_short netshort);
  5. u_long ntohl(u_long netlong);

在这 4 个函数中,前两个是将主机字节序转换成网络字节序,后两个是将网络字节序转换为主机字节序。关于更多的字节序的函数可参考 MSDN。

编程判断主机字节序

方法一:取值法

image.png

方法二:直接转换法

image.png