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语句反汇编的更多相关文章

  1. 黑马程序员—C语言的判断语句

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.分支结构 结构化程序设计(英语:Structured programming),一种编程范型 ...

  2. java基础2 判断语句:if ... else 语句和 switch 语句

    一.if ... else 判断语句 1.if ... else 判断语句的格式 1.1.格式一 if(判断条件){ 执行不满足条件的语句 } 1.2.格式二 if(判断语句){ 满足条件的语句 }e ...

  3. Java入门 - 语言基础 - 10.条件语句

    原文地址:http://www.work100.net/training/java-if-else.html 更多教程:光束云 - 免费课程 条件语句 序号 文内章节 视频 1 概述 2 if...e ...

  4. 《C#语言和数据库技术基础》单词必备

    <C#语言和数据库技术基础> 第一章1..NET Framework   框架2.sharp            尖锐,强烈的3.application      应用程序4.devel ...

  5. while循环语句基础

    while循环语句基础 一while循环语句介绍 循环语句命令常用于重复执行一条指令或一组指令,直到条件不再满足时停止,   Shell脚本语言的循环语句常见的有while, until, for及s ...

  6. 15个初学者必看的基础SQL查询语句

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...

  7. SQL语句基础之 单表查找

    Sql语句之 单表查询 一.一般查询 1.查看表中的所有记录 以及 所有字段(属性) 语句 : select * from student; 2.只查看某些字段 语句:select sname,sex ...

  8. Python新手学习基础之条件语句——elif语句

    elif语句 (相当于C语言的else if) 在Python中,当我们需要有更多的判断条件时,我们往往会使用另外一种语法表达,即使用elif: if 判断条件1: 执行语句1 elif 判断条件2: ...

  9. C语言入门(11)——switch分支语句

    C语言提供了一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) { case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; .... ...

随机推荐

  1. 趣图:后端工程师做 UI 的活

      扩展阅读 趣图:苦逼的后端工程师 趣图:前端 VS 后端 [趣图]开发人员腹黑的一面

  2. ZooKeeper学习(二)ZooKeeper实现分布式锁

    一.简介 在日常开发过程中,大型的项目一般都会采用分布式架构,那么在分布式架构中若需要同时对一个变量进行操作时,可以采用分布式锁来解决变量访问冲突的问题,最典型的案例就是防止库存超卖,当然还有其他很多 ...

  3. .net core中的那些常用的日志框架(Logging篇)

    前言 日志,在我们每个项目中是必不可少的,它不仅能在调试的时候测试数据,而且在项目上线,也是我们排查错误的得力助手,那我就能谈谈,用的多的几个日志框架吧!如果有不对的地方,欢迎来指教错误,谢谢! As ...

  4. pytest封神之路第零步 快速入门

    背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...

  5. 详细分析 Java 中启动线程的正确和错误方式

    目录 启动线程的正确和错误方式 前文回顾 start 方法和 run 方法的比较 start 方法分析 start 方法的含义以及注意事项 start 方法源码分析 源码 源码中的流程 run 方法分 ...

  6. IDEA 使用的配置

    IDEA 使用 工欲善其事必先利其器,选择适合自己的 IDE,会让自己事倍功半.作为 Java 开发环境,有人喜欢 Eclipse,有人喜欢 idea,这其中的差别对比这里不做对比,需要了解的朋友可以 ...

  7. 手把手撸套框架-Victory框架1.0 详解

    目录 其实Victory框架1.0 在8月份就完成了,整个9月份都没有更新博客,主要还是因为松懈了. 所以,趁着国庆节的放假的时间把博客给更新一下,1.0总的来说算不得一个成熟的产品,但是拿来开发我们 ...

  8. IDM下载度盘文件

    百度网盘是百度公司推出的一款个人云服务产品.百度网盘官方版操作简单,我们打开后就可以使用该软件来上传.下载文件等.不仅如此百度网盘软件还可以批量上传文件.支持断点传续等功能,重要的是上传的文件不会占用 ...

  9. #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 ...

  10. matlab中reshape 重构数组

    来源:https://ww2.mathworks.cn/help/matlab/ref/reshape.html?searchHighlight=reshape&s_tid=doc_srcht ...