大小端模式

 大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致

计算机内部是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。
也就是说内存是一个字节序列

但我们处理的数据要以字,双字表示,这就涉及到如何表示多个字节的数据
比如字由两个字节组成,一个字是0xF0D0,那么这个数由两个字节组成,高位的F0,低位的D0,那么在计算机内部,就有一个问题,这两个字节如何储存,高位F0放在内存地址高的储存单元上,还是放到内存低的地址上储存,当然这两个字节是连续的,不同的是大端是 F0 D0这样的字节序列表示,而小端则用 D0 F0,其实都可以的,只要解析这两个字节为字按照自己定义的表示规则,结果是一样的 

cmp word ptr [edi],'EP' ;edi 指向IMAGE_NT_HEADERS 
这个代码是判断PE头标志,我们知道ms关于PE标志magic定义如下
#define IMAGE_NT_SIGNATURE 0x00004550 // PE00
这个是双字,在intel的小端表示中在内存的字节序列为 50 45 00 00
这里只判断50 45 --〉‘P’‘E’
但masm编译器 对于‘EP’按照自己的规则处理,对应着0x4550,而‘PE’对应0x5045
而有的编译器自动转换,将‘EP’转换为0x5045,这个和编译器有关

你可能感兴趣的:(image,存储,编译器)