汇编–从数据类型看WORD与DWORD

刚接触汇编与逆向,记录一些学习笔记。

源代码:

汇编–从数据类型看WORD与DWORD_第1张图片

IDA汇编代码:

汇编–从数据类型看WORD与DWORD_第2张图片

首先 1字=2字节  1字节=8位(8比特)=2位16进制

var_6=dword ptr -6
ptr-6表示指针上移6个单位处,这里的单位是指计算机的寻址单位,一般按字节寻址,[EBP+var_6]就表示EBP-6个字节的地址处。
DWORD 表示双字,是对存入数据的说明。双字=4字节,也就是8位16进制,也就是32比特(二进制)。
mov [EBP+var_6] eax(eax的值为0x00000000,EAX为32位寄存器)表示的就是将0以双字(4字节)形式存入EBP-6地址处。双字形式的0也就是8位16进制的0,32位比特的0。那将占用实际地址几位呢?这里牵扯到计算机的寻址方式。一般以字节进行寻址,一个字节2位16进制。也就是说一个地址单元只能存8比特。
那mov [EBP+var_6] eax要存32比特,就存在了EBP-6,EBP-5,EBP-4,EBP-3四个地址单元上了。

var_2=word ptr -2
ptr-2表示指针上移2个单位处,这里的单位同样是字节,[EBP+var_2]就表示EBP-2字节处。这里和DWORD是一样的。
Word 表示单字=2字节=16比特,是对存入数据的要求,也就是16比特。
mov [EBP+var_2] ax 表示的是将0以单字节的形式存入EBP-2地址处,AX是取EAX的低16位。符合word(单字)的要求。
根据之前说的按字节(4位16进制=16比特)为单位寻址,ax的值存入EBP-2和EBP-1处,这两个地址单元。

short[4]=[100,]的生成
short型长度为2字节,占16位。汇编代码中的执行过程为:首先存入16位的0x64(100),即short[0],再存入32位的(0x00),实际上是两个16位的0x00,即short[1]=0,short[2]=0,最后通过ax寄存器存入16位的0x00,即short[3]=0.
因此汇编代码中表面上只有两步赋0操作。

OD中动态观察:

初始状态:

汇编–从数据类型看WORD与DWORD_第3张图片

存入1字Word(双字节)的0x64

汇编–从数据类型看WORD与DWORD_第4张图片

存入双字DWORD(4字节=8位16进制)的0x00,赋值short[1]和short[2]

汇编–从数据类型看WORD与DWORD_第5张图片

存入单字(双字节=4位16进制)的0x00,short[3]=0

汇编–从数据类型看WORD与DWORD_第6张图片

double型

double型占8字节(64位),在内存地址中占8个单位。是分两次存入的,一次赋值4个字节的内容。之后的赋0操作略有不同,是通过一个循环实现的。

ECX=6表示循环6次,XOR EAX EAX 将EAX初始化为0从[EBP+var_50]开始向下循环6次,每次存入32为的0x00(EAX为32位)即4字节,共24字节的0,即为3个double型的0,。赋值完毕。

文章同步到我的博客http://www.zjzhhb.com/archives/556

禁止转载

你可能感兴趣的:(汇编与逆向)