大端与小端(Endianness)
概念简介
在计算机系统中,端序(Endianness)描述了多字节数值在内存中的字节排列顺序:
- 大端(Big-endian):高位字节存放在低地址;例如 0x12345678 在内存中表示为 12 34 56 78。
- 小端(Little-endian):低位字节存放在低地址;例如 0x12345678 在内存中表示为 78 56 34 12。
现代 x86/x86_64 架构通常使用小端序,而某些网络协议(如网络字节序)以及少部分硬件架构使用大端序。
为什么端序重要?
- 网络协议:网络字节序通常采用大端,跨主机通信需要显式转换(hton/ntoh)。
- 文件格式:某些文件头或二进制格式指定了端序,解析时需要考虑端序。
- 内存比较/扫描:在做内存扫描和匹配时,端序决定了如何解释字节序列与值的关系。
如何处理端序
- 在对外协议交互或磁盘持久化时,显式使用
hostToNetwork/networkToHost或对应的大/小端转换函数。 - 在内存扫描时,根据目标值的实际字节序(例如原始二进制模式或整数值)进行匹配。
参考
- 工具模块中的端序 API (API 与转换函数)
- 字节比较与扫描 (scan.bytes) — 使用端序进行匹配的示例