条件判断 & 循环语句的逆向
来源:互联网 发布:淘宝快递费用价格表 编辑:程序博客网 时间:2024/05/16 16:15
【重点:当判断大于&小于时】(根据执行体是否紧贴着跳转指令来判断是那个条件语句)
一:执行体紧贴着跳转指令时,代码中的条件判断都会编译成否决条件的形式,原因如下:
如判断:if (a>5) printf("OK");
1为真时是让它往下继续执行printf,可是为真的跳转指令都会跳转而不会向下执行,所以才会用否决条件的跳转指令
2这样原本的JG会编译成否决条件的跳转指令,即:JLE,这样若为假(代表不小于等于5)就是不满足JLE(等于满足最初条件的真,即:大于5),就能执行紧贴着跳转指令的执行体,即位于跳转指令的下条指令.
即:否决条件的假等同于最初条件的真(最初条件是大于0,否决条件JZ的假就是大于0,这样就等同于最初条件的大于0了,且也能在执行跳转指令下方的执行体了)
二:执行体未紧贴着跳转指令,即不位于跳转指令的下条指令时则不用判断条件取反,如do...while & swich 等情况
【当判断是否为0时,代码中的判断条件用JZ &JNZ即可】
if:使用了否决条件的跳转指令 &每个执行体的最后一句都是jmp 411aa9h用于跳出if,最后一个执行体则没有
【if...else if...else】
if(c>0 && c<10)
cmp dword ptr [c],0
jle 411a81h
cmp dword ptr [c],0ah
jge 411a81h
{
printf("c>0");
push offset string "c>0"
call printf
addesp 4
}
else if(c>10 && c<100)
jmp 411aa9h
411a81h:cmp dword ptr [c],0ah
jle 411a9ch
cmp dword ptr [c],64h
jge 411a9ch
{
printf("c>10 && c<100")
push offset string "c>10 && c<100"
call printf
addesp 4
}else
{
printf("c>10 && c<100")
jmp411aa9h
411a9ch:pushoffset string "c>10 && c<100"
call printf
addesp 4
]
switch:不使用否决条件的跳转指令 &判断部分全部在开头,执行块都连续排列在下方
【switch】
switch( c)
mov eax,dword ptr [c]
mov dword ptr [ebp-0e8h],eax
cmp dword ptr [ebp-0e8h],0
je 411a83h
cmp dword ptr [ebp-0e8h],1
je 411a90h
jmp 411a9fh
{
case 0:
printf("c>0")
411a83h:push offset string "c>0"
call printf
add esp 4;C 调用方式,调用者清理堆栈
case 1://由于case0和case1之间没有break所以两个执行块连在一起了
{
printf("c>10 && c<100")
411a90h:push offset string "c>10&& c<100"
call printf
add esp4
break;
jmp 411aach ;如果有break会增加一个无条件跳转
}
default:
printf("c>10 && c<100")
411a9fh:push offset string "c>10&& c<100"
call printf
add esp 4
}
do...while:不使用否决条件的跳转指令,执行体未在跳转指令的下方,所以未用否决形式
while:使用了否决条件的跳转指令,执行体在跳转指令的下方,所以使用了否决形式
【do...while】
do{
c = c+1;
411A55h:moveax,dword ptr [c]
add eax,dword ptr [i]
mov dword ptr [c],eax
}while (c<100)
cmp dword ptr [c],64h
jl 411A55H ;执行体未在跳转指令的下方,所以未用否决形式
【while】
while(c<100){
cmp dword ptr [c],64h
jge退出;执行体在跳转指令的下方,所以使用了否决形式
c = c+1;
mov eax,dword ptr [c]
add eax,dword ptr [i]
mov dword ptr [c],eax
}
- 条件判断 & 循环语句的逆向
- 条件判断 & 循环语句的逆向
- 条件判断语句和循环的格式
- for (初始化语句; 判断条件; 循环条件)
- 关系循环语句的条件判断2012-10-29
- 4.Lua条件判断和循环语句
- python基础-06-条件判断、循环语句
- 初始化语句; 判断条件; 循环条件
- JAVA开发之 33-循环控制语句与条件判断语句的使用
- 170523 逆向-循环语句
- 循环语句&条件语句
- 条件语句、循环语句
- for(foo('A');foo('B')&&(i<2);foo('C')) ,其实考的就是for (初始化语句; 判断条件; 循环条件)
- python 列表处理,for循环语句,if条件判断
- nodejs003-运算表达式/条件判断/循环语句/垃圾回收
- Python基础语法之条件判断语句、循环
- Python学习笔记(五)—条件判断和循环语句
- Python之 If条件判断、While循环语句
- Mac OS X的剪切操作
- ext4 grid 分页前台后台源码
- JSch - Java实现的SFTP(文件下载详解篇
- C/C++浮点数在内存中的存储方式
- hdu 4617
- 条件判断 & 循环语句的逆向
- KMP算法
- NSDate显示和时区的关系
- 黑马程序员<.net学习笔记--数据库>
- JNDI 是什么
- std::vector<T>的reserve()和resize()
- SQL函数:字符串中提取数字,英文,中文,过滤重复字符
- 百度的笔试题
- JAVA 简单累加