
反汇编-流程控制语句-2-循环控制语句分析
发布日期:2021-05-09 00:17:34
浏览次数:18
分类:精选文章
本文共 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)
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月28日 21时19分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux:安装Nginx
2023-02-05
Linux:安装npm
2023-02-05
Linux:安装Redis
2023-02-05
List,Set,Map三者的区别(不同点)
2023-02-05
List<T> to DataTable
2023-02-05
ListBox 循环删除当前项
2023-02-05
listbox相互传值
2023-02-05
Listener监听器
2023-02-05
ListUtil常用操作
2023-02-05
Listview 利用Datapager进行分页
2023-02-05
listview数据刷新后自动滑到底部
2023-02-05
list循环删除元素中的坑
2023-02-05
list深拷贝和浅拷贝
2023-02-05
List集合排序找出其中的最大和最小值
2023-02-06
list<Map> 怎么转list<String>
2023-02-06
List<String>用空串替换null值,并且都加上单引号,并且转为字符串用,分割
2023-02-06
liunx 下WebBench 安装与压力测试
2023-02-06
liunx 网络基础管理
2023-02-06