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; .... ...
随机推荐
- IIS网站建立好后如何更改绑定IP或端口号
写在前面的话 我们利用IIS建立网站的时候,一般都是设定好网站名称和物理地址,直接下一步建立完成了.正常访问都没问题,但如果我们这时候想要更改访问的IP或者端口号,打开了很多设置项就是没找到设置的地方 ...
- mysql-7-join
#进阶7:连接查询 /* 多表连接:查询的字段来自多个表 按功能分类: 内连接: 等值连接 非等值连接 自连接 外连接: 左外连接 右外连接 全外连接 交叉连接 */ USE girls; SELEC ...
- P3378 堆(模板)
P3378 [模板]堆 题目描述 给定一个数列,初始为空,请支持下面三种操作: 给定一个整数 x,请将 x 加入到数列中. 输出数列中最小的数. 删除数列中最小的数(如果有多个数最小,只删除 1 个) ...
- 【保姆级教程】手把手教你进行Go语言环境安装及相关VSCode配置
[Go语言入门系列]前面的文章: [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞懂怎么用接口 本篇文 ...
- pycharm 解决PEP8问题,配置autopep8到菜单栏
autopep8是一个可以将Python代码自动排版为PEP8风格第三方包,使用它可以轻松地排版出格式优美整齐的代码.网络上有很多介绍如何在pycharm中配置autopep8的方案,但很多方案中还是 ...
- npm包管理器报错-npm ERR! Response timeout while trying to fetch https://registry.npmjs.org/@XXX(over 30000ms)
由于这两天买的新电脑在短期内频频蓝屏.卡机,不得不把自己其他的本本拿出来换上,但是程序员换电脑是真的痛苦,其他不说就说一个配环境 真的折腾哈 我是一名前端菜鸟,现在自己的本本上使用的是npm包管理工具 ...
- 如何选择JVM垃圾回收器?
明确垃圾回收器组合 -XX:+UseSerialGC 年轻代和老年代都用串行收集器 -XX:+UseParNewGC 年轻代使用ParNew,老年代使用 Serial Old -XX:+UsePara ...
- Python库之SQLAlchemy
一.SQLAlchemy简介 1.1.SQLAlchemy是什么? sqlalchemy是一个python语言实现的的针对关系型数据库的orm库.可用于连接大多数常见的数据库,比如Postges.My ...
- Cypress系列(62)- 改造 PageObject 模式
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html PO 模式 PageObject(页面对 ...
- linux配置定时任务cron/定时服务与自启动
实现linux定时任务有:cron.anacron.at,使用最多的是cron任务 名词解释 cron--服务名:crond--linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 ...