汇编–从数据类型看WORD与DWORD |
您所在的位置:网站首页 › 汇编dw用法 › 汇编–从数据类型看WORD与DWORD |
刚接触汇编与逆向,记录一些学习笔记。 源代码: IDA汇编代码: 首先 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中动态观察: 初始状态: 存入1字Word(双字节)的0x64 存入双字DWORD(4字节=8位16进制)的0x00,赋值short[1]和short[2] 存入单字(双字节=4位16进制)的0x00,short[3]=0 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 禁止转载 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |