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; .... ...
随机推荐
- 趣图:后端工程师做 UI 的活
扩展阅读 趣图:苦逼的后端工程师 趣图:前端 VS 后端 [趣图]开发人员腹黑的一面
- ZooKeeper学习(二)ZooKeeper实现分布式锁
一.简介 在日常开发过程中,大型的项目一般都会采用分布式架构,那么在分布式架构中若需要同时对一个变量进行操作时,可以采用分布式锁来解决变量访问冲突的问题,最典型的案例就是防止库存超卖,当然还有其他很多 ...
- .net core中的那些常用的日志框架(Logging篇)
前言 日志,在我们每个项目中是必不可少的,它不仅能在调试的时候测试数据,而且在项目上线,也是我们排查错误的得力助手,那我就能谈谈,用的多的几个日志框架吧!如果有不对的地方,欢迎来指教错误,谢谢! As ...
- pytest封神之路第零步 快速入门
背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...
- 详细分析 Java 中启动线程的正确和错误方式
目录 启动线程的正确和错误方式 前文回顾 start 方法和 run 方法的比较 start 方法分析 start 方法的含义以及注意事项 start 方法源码分析 源码 源码中的流程 run 方法分 ...
- IDEA 使用的配置
IDEA 使用 工欲善其事必先利其器,选择适合自己的 IDE,会让自己事倍功半.作为 Java 开发环境,有人喜欢 Eclipse,有人喜欢 idea,这其中的差别对比这里不做对比,需要了解的朋友可以 ...
- 手把手撸套框架-Victory框架1.0 详解
目录 其实Victory框架1.0 在8月份就完成了,整个9月份都没有更新博客,主要还是因为松懈了. 所以,趁着国庆节的放假的时间把博客给更新一下,1.0总的来说算不得一个成熟的产品,但是拿来开发我们 ...
- IDM下载度盘文件
百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...
- #error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
转载:https://www.cnblogs.com/cvwyh/p/10570920.html 错误 在使用VS编译文件时出现了如下错误: #error: Building MFC applicat ...
- matlab中reshape 重构数组
来源:https://ww2.mathworks.cn/help/matlab/ref/reshape.html?searchHighlight=reshape&s_tid=doc_srcht ...