02.小端标记法

1. 字节序

  • 字节序分为大端序小端序
  • 字符串最后是以NULL结尾的

1.1. 大端序与小端序

大端序:内存地址低位存储数据的高位、内存地址高位存储数据的低位
小端序:内存地址高位存储数据的高位、内存地址低位存储数据的低位

采用大端序保存多字节数据非常直观,它常用于大型UNIX服务器的RISC系列的CPU中。此外,网络协议中也经常采用大端序方式。了解这些,对从事x86系列应用程序的开发人员以及代码逆向分析人员具有非常重要的意义,因为通过网络传输应用程序使用数据时,往往都需要修改字节序。

1.2. 在OllyDbg中查看小端序

代码

#include "windows.h"

BYTE    b       =   0x12;
WORD    w       =   0x1234;
DWORD   dw      =   0x12345678;
char    str[]   =   "abcde";

int main(int argc, char *argv[])
{
    BYTE    lb  =   b;
    WORD    lw  =   w;
    DWORD   ldw =   dw;
    char    *lstr  =   str;

    return 0;
}

直接goto到401000 main() 函数处
Pasted image 20250311125039
全局变量b、W、dw、str的地址分别为413880、413888、413884、41388c。下面通过OllyDbg的数据窗口来分别查看它们所在的内存区域
Pasted image 20250311125317
可以发现变量w的数据采用小段存储