在观察内存的时候应当注意“内存数据”与“数值数据”的区别。在我们的调试环境中,内存是由低到高分布的,且计算机体系架构属于传统的“大顶机”(big endian,也有文献称为“大端机”)。我们可以简单地把这种情形理解成Win32系统在内存中由低位向高位存储一个4字节的双字(DWORD),但在作为“数值”应用的时候,却是按照由高位字节向低位字节进行解释。这样一来,在我们的调试环境中,“内存数据”中的DWORD和我们逻辑上使用的“数值数据”是按字节序逆序过的。
例如,变量authenticated在内存中存储为0x 01 00 00 00,这个“内存数据”的双字节会被计算机由高位向低位字节解释成“数值数据”0x 00 00 00 01。出于便于阅读的目的,OllyDbg在栈区显示的时候已经将内存中双字的字节序反转了,也就是说,栈区显示的是“数值数据”,而不是原始的”内存数据“,所以,在栈内看数据时,从左向右对于左边地址的偏移依次为3、2、1、0。
|