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. Java学习day06

    [方法]   [可以在不是main的方法中调用其他方法] [方法调用时的参数问题] [方法调用]    [上面定义了两个class,实际上不推荐] [递归调用]    [方法的返回值]   [retu ...

  2. 这么美的“vector容器”,你确定你不看吗?

    内容思维导图: 一.vector基本概念: 1.功能: vector数据结构和数组非常相似,也称为单端数组. 2.vector和普通数组的区别: 不同之处在于数组是静态空间,而vector是可以动态扩 ...

  3. 给select赋值的一种方法

    做毕设遇到的问题,在update数据的时候,要先把原来的数据传递给前台,赋值给input等标签,但是啊,select标签没有value属性啊,所以在这里研究了一下,总结一个给select赋值的方法吧 ...

  4. 如何学习iOS开发?iOS Developer Library足矣!

    记得上高中的时候,寄信请教二哥学习经验,二哥来信介绍学习经验说:资料书要快速阅读,把书上的题做完,然后再买几套资料书(习题集)继续练习. 这是二哥的经验,因为他自学能力强,可以消化多套资料书. 我仿照 ...

  5. error C3861: “back_inserter”: 找不到标识符

    Reference:https://blog.csdn.net/taotaoah/article/details/52225364 and https://baike.baidu.com/item/c ...

  6. 介绍了ASP。净样板

    下载sample application (or see on Github) 内容 问题介绍什么是ASP.NET样板文件NET Boilerplate不是开始创建空的web应用程序从模板域层 关于名 ...

  7. 优质分享 | Spring Boot 入门到放弃!!!

    持续原创输出,点击上方蓝字关注我 目录 前言 视频目录 如何获取? 总结 前言 最近不知不觉写Spring Boot专栏已经写了九篇文章了,从最底层的项目搭建到源码解析以及高级整合的部分,作者一直在精 ...

  8. 判断移动还是PC 以及微信环境

    //判断pc还是移动端 function IsPC() {   var userAgentInfo = navigator.userAgent;   var Agents = ["Andro ...

  9. 2016年 实验四  B2B模拟实验

    实验四  B2B模拟实验 [实验目的] ⑴.掌握B2B中供应商的供求信息发布.阿里商铺开设和订单交易等过程. ⑵.掌握B2B中采购商的采购信息的发布.交易洽谈.网上支付和收货等过程. [实验条件] ⑴ ...

  10. 【7】进大厂必须掌握的面试题-Java面试-Jsp

    1. jsp的生命周期方法是什么? 方法 描述 公共无效的jspInit() 与servlet的init方法相同,仅被调用一次. 公共无效_jspService(ServletRequest requ ...