逆向中的大小端序
逆向中的大小端序
前言
在逆向中常常能碰到字符串逆序的问题,例如:
s应该是一个字符串,这个字符串的每个字符的ASCII值应该是69 63 75 67 60 6F 66 7F
。可以看出来和图中顺序正好相反。
什么是大端序和小端序
在存储数据的时候,在面对大字节数据的时候,通常会选择小端序进行存储。所谓小端序就是高地址存放高位数据,低地址存放低位数据,大端序则是高地址存放低位数据,低地址存放高位数据。我们先假设要存储一个4个字节的数据:12345678h
,用一张图片解释一下:
为什么在IDA反编译的时候会出现字符串逆序的问题?
这是因为IDA在反编译的时候将s的类型识别为__int64
,一个__int64
数据占8字节。而面对多字节数据时,采取小端序的存储,所以IDA就把字符串的存储方式错误的识别为小端序了,但是字符串正常应该是顺序存储。同样的使用一张图来解释一下:
这段内存存储的是一个字符串,但是如果IDA没有识别出来是一个字符串而识别成了一个__int64
类型的数据,就会导致在识别数据时按照小端序来识别,也就是此时识别成了kirtsirC
。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Cristrik010
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果