C语言之 判断语句基础与if语句反汇编
0x01.判断语句介绍以及用法
判断语句有哪些?
1、If
用法1:
if (条件)
{
      //代码块
}
当条件成立,也就是为True时,执行{}中的代码
用法2:
if(条件)
{
      //代码块
}
else
{
      //代码块
}
如上,当条件不成立的时候执行else语句里面的代码
用法3:
if(条件)
{
      //代码块
}
else if
{
      //代码块
}
else
{
      //代码块
}
例如
2、Switch
switch (表达式)
{
	case 常量表达式1:
		语句;
		break;
	case 常量表达式2:
		语句;
		break;
	case 常量表达式3:
		语句;
		break;
	case 常量表达式3:
		语句;
		break;
	default:
		语句;
		break;
}
switch要求:
1、case后面必须是常量表达式
2、case后常量表达式的值不能一样
3、switch后面表达式必须为整数
3、?:运算符
int main()
{
	int a = 10;
	int b = 5;
	int c = a > b ? a : b;
	printf("%d", c);
	return 0;
}

到此,条件判断语句就差不多了
0x02.JCC指令与IF语句反汇编



1、案例一
mov         eax, dword ptr[ebp + 8]					分析:cmp指令 影响标志位
cmp         eax, dword ptr[ebp + 0Ch]					jle :小于或者等于就跳转到00401059
jle         00401059
2、案例二
mov         eax, dword ptr[ebp + 8]					分析:cmp指令 影响标志位
cmp         eax, dword ptr[ebp + 0Ch]					jl  :小于则跳转
jl          00401059
3、案例三
mov         eax, dword ptr[ebp + 8]					jge :大于或者等于则跳转
cmp         eax, dword ptr[ebp + 0Ch]
jge         00401059
4、案例四
mov         eax, dword ptr[ebp + 8]					jg :大于则跳转
cmp         eax, dword ptr[ebp + 0Ch]
jg          00401059
整体分析:
函数调用处代码:
push        5						分析:
push        4						两个参数
call        0040100f
add         esp, 8

接下来就可以做个小练习了:
调用处代码:
push        5
push        4
call        0040100f
add         esp, 8
函数内部:
函数内部功能分析:
00401030   push        ebp
00401031   mov         ebp, esp						1、分析参数:
00401033   sub         esp, 44h
00401036   push        ebx
00401037   push        esi
00401038   push        edi						2、分析局部变量
00401039   lea         edi, [ebp - 44h]
0040103C   mov         ecx, 11h
00401041   mov         eax, 0CCCCCCCCh
00401046   rep stos    dword ptr[edi]
00401048   mov         eax, [004225c4]				        3、分析全局变量
0040104D   mov         dword ptr[ebp - 4], eax
00401050   mov         ecx, dword ptr[ebp + 8]
00401053   cmp         ecx, dword ptr[ebp + 0Ch]
00401056   jg          00401064
00401058   mov         edx, dword ptr[ebp + 0Ch]	                4、功能分析
0040105B   add         edx, dword ptr[ebp - 4]
0040105E   mov         dword ptr[004225c4], edx
00401064   pop         edi
00401065   pop         esi						5、返回值分析
00401066   pop         ebx
00401067   mov         esp, ebp
00401069   pop         ebp
0040106A   ret						                6、还原成C函数
00401048   mov         eax, [004225c4]	            把004225c4的值给eax
0040104D   mov         dword ptr[ebp - 4], eax      把eax的值给栈低-4的地方
00401050   mov         ecx, dword ptr[ebp + 8]      把4给ecx
00401053   cmp         ecx, dword ptr[ebp + 0Ch]    if(ecx>5)
00401058   mov         edx, dword ptr[ebp + 0Ch]    把5给edx
0040105B   add         edx, dword ptr[ebp - 4]      把edx加上eax全局变量的值
0040105E   mov         dword ptr[004225c4], edx     再把eax的值给 004225c4地址上
C语言之 判断语句基础与if语句反汇编的更多相关文章
- 黑马程序员—C语言的判断语句
		
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.分支结构 结构化程序设计(英语:Structured programming),一种编程范型 ...
 - java基础2 判断语句:if ... else 语句和 switch 语句
		
一.if ... else 判断语句 1.if ... else 判断语句的格式 1.1.格式一 if(判断条件){ 执行不满足条件的语句 } 1.2.格式二 if(判断语句){ 满足条件的语句 }e ...
 - Java入门 - 语言基础 - 10.条件语句
		
原文地址:http://www.work100.net/training/java-if-else.html 更多教程:光束云 - 免费课程 条件语句 序号 文内章节 视频 1 概述 2 if...e ...
 - 《C#语言和数据库技术基础》单词必备
		
<C#语言和数据库技术基础> 第一章1..NET Framework 框架2.sharp 尖锐,强烈的3.application 应用程序4.devel ...
 - while循环语句基础
		
while循环语句基础 一while循环语句介绍 循环语句命令常用于重复执行一条指令或一组指令,直到条件不再满足时停止, Shell脚本语言的循环语句常见的有while, until, for及s ...
 - 15个初学者必看的基础SQL查询语句
		
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
 - SQL语句基础之 单表查找
		
Sql语句之 单表查询 一.一般查询 1.查看表中的所有记录 以及 所有字段(属性) 语句 : select * from student; 2.只查看某些字段 语句:select sname,sex ...
 - Python新手学习基础之条件语句——elif语句
		
elif语句 (相当于C语言的else if) 在Python中,当我们需要有更多的判断条件时,我们往往会使用另外一种语法表达,即使用elif: if 判断条件1: 执行语句1 elif 判断条件2: ...
 - C语言入门(11)——switch分支语句
		
C语言提供了一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) { case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; .... ...
 
随机推荐
- solr综合案例
			
1. 综合案例 1.1. 需求 使用Solr实现电商网站中商品信息搜索功能,可以根据关键字.分类.价格搜索商品信息,也可以根据价格进行排序,并且实现分页功能. 界面如下: 1.2分析 开发人员需要的 ...
 - ISCC2018 writeup(web)
			
比较数字大小 F12 修改maxlength为4 web01 strcmp()函数遇到数组会返回NULL 而PHP是弱类型语言 在==比较的时候,如果有数值的话会先将字符串转换为数值在进行比较,而N ...
 - zabbix_server.conf配置文件参数
			
NodeID: 在amster-child 的分布式架构中,这个ID是唯一标识zabbix node的号码 ListenPort:Trapper 类型Item监听的端口, SourceIP: 在连接其 ...
 - 爬虫日志监控 -- Elastc Stack(ELK)部署
			
傻瓜式部署,只需替换IP与用户 导读: 现ELK四大组件分别为:Elasticsearch(核心).logstash(处理).filebeat(采集).kibana(可视化) 在elastic官网下载 ...
 - HTML+CSS系列:登录界面实现
			
一.效果 二.具体实现 1.index.html <!DOCTYPE html> <html> <head> <meta charset="utf- ...
 - c++ 中预编译头文件名 pch.h
			
转载:https://www.it-swarm.asia/zh/c++/%e6%88%91%e5%8f%af%e4%bb%a5%e4%bd%bf%e7%94%a8includepchh%e2%80%9 ...
 - 带着好奇心去探索IDEA
			
带着好奇心去探索IDEA 工欲善其事必先利其器 软件是提高工作效率的工具.所以了解工具的特性,操作方式,能更好地使用它.一般使用掌握逻辑: 第一步:了解菜单栏-工具栏-其他窗口: 第二步:实战,真正利 ...
 - ansible-playbook-roles基本使用
			
1. ansible-角色-roles基本使用 1.1) 创建roles目录结构 1 [root@test-1 ansible]# mkdir -p /ansible/roles/{common,n ...
 - day37 Pyhton 网络编程04
			
# tcp协议和udp协议的选择问题 # tcp # 大量的连续的数据 传递文件\发送邮件 # 文件的传递 # 下载电影 # udp # 短消息类 社交软件 # qq 微信 # 在线播放视频 快会丢帧 ...
 - day35 Pyhton 网络编程02
			
一内容回顾 网络基础 网络应用开发架构 B/S架构 浏览器直接作为客户端的程序 C/S架构 B/S是特殊的C/S osi七层模型 应用层 python代码 http https ftp ...