
反汇编-流程控制语句-2-循环控制语句分析
发布日期:2021-05-09 00:17:34
浏览次数:11
分类:博客文章
本文共 1655 字,大约阅读时间需要 5 分钟。
反汇编-流程控制语句-2-循环控制语句分析
C/C++中有三种循环语句,分别是do/while/for循环,具体的查看C/C++的语法书
MOVZX、MOVSX指令
MOVZX和MOVSX可以理解为MOV指令的变化,但是也有区别
MOVZX 操作数1,操作数2
MOVSX 操作数1,操作数2
操作数1必须是寄存器,操作数2可以是寄存器或者内存,但是不能是立即数
MOVZX、MOVSX与MOV指令的区别
MOV指令是原值传送,两边数据宽度必须一致。
MOVSX A,B
MOVZX A,B
MOVSX、MOVZX的操作数B所占空间必须小于操作数A
将小存储单元的数据传送到大存储单元的数据。
MOVSX和MOVZX的区别
MOVZX将小存储单元的数据移动到大存储单元的数据,未使用部分用0填充
MOVSX将小存储单元的数据移动到大存储单元的数据,未使用部分用数的符号位填充
循环语句分析
while
int a = 3; 00413C03 mov dword ptr [a],3 while (a > 0) 00413C0A cmp dword ptr [a],0 00413C0E jle LoopTest+4Bh (0413C1Bh) { a--; 00413C10 mov eax,dword ptr [a] 00413C13 sub eax,1 00413C16 mov dword ptr [a],eax } 00413C19 jmp LoopTest+3Ah (0413C0Ah)
while循环,首先将条件进行比较,然后取比较的结果的反的JCC跳转,比如这里的a>3,就采用jle左边小于等于右边就跳转到while语句结束的地址
for
int c = 0; 00413BD9 mov dword ptr [c],0 for (int i = 0; i < 3; i++) 00413BE0 mov dword ptr [ebp-8],0 00413BE7 jmp LoopTest+22h (0413BF2h) 00413BE9 mov eax,dword ptr [ebp-8] 00413BEC add eax,1 00413BEF mov dword ptr [ebp-8],eax 00413BF2 cmp dword ptr [ebp-8],3 00413BF6 jge LoopTest+33h (0413C03h) { c++; 00413BF8 mov eax,dword ptr [c] 00413BFB add eax,1 00413BFE mov dword ptr [c],eax } 00413C01 jmp LoopTest+19h (0413BE9h)
for循环比较复杂,首先进行赋值,然后跳转到条件比较,同样比较后进行反向的JCC跳转,如果没有跳转就执行for里面的语句,然后再跳转到自增运算里面。这里比较复杂的就是如果在for里面赋值的话会多几个步骤
do-while
int b = 0; 00413C1B mov dword ptr [b],0 do { b++; 00413C22 mov eax,dword ptr [b] 00413C25 add eax,1 00413C28 mov dword ptr [b],eax } while (b < 3); 00413C2B cmp dword ptr [b],3 00413C2F jl LoopTest+52h (0413C22h)
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月29日 04时44分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MySQL事务(学习笔记)
2019-03-06
一个web前端开发者的日常唠叨
2019-03-06
内存分配-slab分配器
2019-03-06
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
2019-03-06
Jupyter Notebook 暗色自定义主题
2019-03-06
[Python学习笔记]组织文件
2019-03-06
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2019-03-06
从RocketMQ的Broker源码层面验证一下这两个点
2019-03-06
如何正确的在项目中接入微信JS-SDK
2019-03-06
纵览全局的框框——智慧搜索
2019-03-06
快服务流量之争:如何在快服务中占领一席之地
2019-03-06
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2019-03-06
Unity平台 | 快速集成华为性能管理服务
2019-03-06
详细实例教程!集成华为虚假用户检测,防范虚假恶意流量
2019-03-06
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2019-03-06
使用Power BI构建数据仓库与BI方案
2019-03-06
pytest封神之路第二步 132个命令行参数用法
2019-03-06
Django认证系统并不鸡肋反而很重要
2019-03-06
快用Django REST framework写写API吧
2019-03-06
tep用户手册帮你从unittest过渡到pytest
2019-03-06