在计算机领域中,字节序(Byte Ordering)是多字节数据在计算机内存中存储或网络传输时各字节的存储顺序.分为小端序(Little endian)和大端序(Big endian).
1. 字节序
|
|
以下为不同数据根据不同字节序保存时的不同:
TYPE | Name | SIZE | 大端序类型 | 小端序类型 |
---|---|---|---|---|
BYTE | b | 1 | [12] | [12] |
WORD | w | 2 | [12][34] | [34] [12] |
DWORD | dw | 4 | [12][34][56][78] | [78][56][34][12] |
char[] | str | 6 | [61][62][63][64][65][00] | [61][62][63][64][65][00] |
提示:
查看ASCII码表,字母a的ASCII码的十六进制表示为0x61,字母e的ASCII码的十六进程表示为0x65. 字符串最好都是以NULL结尾.
因为数据类型为字节型(BYTE),其长度都为1个字节,所以保存在大端序类型或者小端序类型,字节顺序都一致!如果数据长度超过2个字节,则会在大端序和小端序上面存储的数据不同.如果是字符串被保存在数组str中,字符数组在内存中连续,此时无论在大端序还是小端序,存储顺序都相同!
1.1 大端序和小端序
大端序常用于大型UNIX服务器的RISC系列的CPU中,而小端序采用逆向式存
储数据,在Intel x86 CPU常用到.
1.2 在OllyDbg中查看小端序
|
|
用OllyDbg调试,用Go to命令(Ctrl+G)跳转到401000地址
main()函数地址为401000,全局变量b、w、dw、str地址分别为40AC40、40AC44、40AC48、40AC4C.可以来到数据窗口用Go to命令跳转到40AC40处.
可以看到,变量w与dw中的数据都采用了小端序存储.