逆向中的大小端序

前言

在逆向中常常能碰到字符串逆序的问题,例如:

image-20231112224712122

s应该是一个字符串,这个字符串的每个字符的ASCII值应该是69 63 75 67 60 6F 66 7F。可以看出来和图中顺序正好相反。

什么是大端序和小端序

在存储数据的时候,在面对大字节数据的时候,通常会选择小端序进行存储。所谓小端序就是高地址存放高位数据低地址存放低位数据,大端序则是高地址存放低位数据低地址存放高位数据。我们先假设要存储一个4个字节的数据:12345678h,用一张图片解释一下:

image-20231112225856654

为什么在IDA反编译的时候会出现字符串逆序的问题?

这是因为IDA在反编译的时候将s的类型识别为__int64,一个__int64数据占8字节。而面对多字节数据时,采取小端序的存储,所以IDA就把字符串的存储方式错误的识别为小端序了,但是字符串正常应该是顺序存储。同样的使用一张图来解释一下:

image-20231113103406465

这段内存存储的是一个字符串,但是如果IDA没有识别出来是一个字符串而识别成了一个__int64类型的数据,就会导致在识别数据时按照小端序来识别,也就是此时识别成了kirtsirC