汇编–从数据类型看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
禁止转载
汇编–从数据类型看WORD与DWORD相关推荐
- c语言打印qword类型,c/c++开发分享c语言中数据类型BYTE,WORD和DWORD的格式说明符?...
在 例如,如果我尝试使用"%lu"显示BPB_BytsPerSec,我会得到不同寻常的数据. printf("Bytes per Sector: %lu", b ...
- 用汇编的眼光看C++(开篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很多朋友,包括我自己在内,对C++语言的很多特性不是很明白.特别是几年前找工作的时候,为了应付 ...
- 用汇编的眼光看C++(之退出流程)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 无论是在判断还是在循环的过程中,通常在遇到合适的条件的时候就会退出相应的模块.跳出模块运行的方 ...
- 用汇编的眼光看C++ (之x86汇编)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 说到用汇编的眼光看C++语言,那么怎么阅读汇编代码就成了我们需要解决的一个问题.其实,实话说, ...
- WORD 和DWORD
WORD与DWORD 在看C/C++的书或者试题时,有时会见到利用word或dword定义的变量,第一次看到的时候并不知其是什么,更不用说word或dword占几个字节了.幸好在VC安装文件夹下有相关 ...
- word或dword区别
word或dword区别 在看C/C++的书或者试题时,有时会见到利用word或dword定义的变量,第一次看到的时候并不知其是什么,更不用说word或dword占几个字节了.幸好在VC安装文件夹下有 ...
- windows下WORD 和DWORD
WORD与DWORD 在看C/C++的书或者试题时,有时会见到利用word或dword定义的变量,第一次看到的时候并不知其是什么,更不用说word或dword占几个字节了.幸好在VC安装文件夹下有相关 ...
- 用汇编的眼光看C++(之 总结篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 早在八月份的时候,就陆陆续续写了二十多篇用汇编语言看C++的博客内容.在此为了做一个概括,也为 ...
- linux看电影软件下载,LINUX总结第5篇:Cent os常用软件(看电影、听音乐、看pdf、看word等)...
掐指一算,我用LINUX已经有2年的时间,但是仔细向来,貌似常用的也就是cp\ls\cd等命令,搭建服务器等一概没玩过.故,痛下绝心,将自己的电脑改装成Cent OS 6.4,能不用WINDOWS坚决 ...
最新文章
- traceroute/tracert--获取网络路由路径
- 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集
- SimpleDateFormat处理 dd-MMM-yy类型日期
- iOS 中KVC、KVO、NSNotification、delegate 总结及区别
- android 两端对齐,LinearLayout子控件两端对齐
- python学习: 如何循序渐进学习Python语言
- grootjs 简明教程
- 初分配和再分配图解_针织好看暖和的儿童帽子图解教程,宝妈们千万不要错过...
- 事务对性能影响_不是事务的事务!(分布式事务系列-完结篇)
- 2018-04-22jenkins+maven+svn环境搭建学习心得
- 概率扩散模型 Probabilistic Diffusion Model
- android模拟器设置静态ip,安卓模拟器多开挂手游改IP防封号技术讲解
- 小米手机miui截图后游戏重启的问题
- 如何做私域?私域流量运营怎么做?为什么今年都布局企业微信运营?(附企微运营干货)
- FPGA学习汇总(六)----数码管显示(1)
- table+jq实现日期排期表
- 《电子商务与企业经营管理》
- 为什么在Google上搜不到我的网页
- mysql怎么启用sa用户_安装SQL SERVER开启SA用户登录的方法
- Oracle的emp表的基本函数学习