<安全攻防之switch>

switch

① 当判断条件小于4时switch的汇编代码
Snipaste_2019-10-30_15-36-04.png
switch少量判断.png
② 当条件大于4时switch执行default的汇编代码(我传入的参数是5,switch会执行default)
switch4.png

switch-default.png
  • 我们看一下ida给我们分析的(ida更加详细的给出了代码的执行顺序以及打印信息)


    switchDefaultIDA.png
③ 当条件大于3时switch执行中间判断的汇编代码(我传入的参数是2)
switch-noDefault.png

switch-noDefault1.png

Snipaste_2019-11-04_12-49-31.png

switch_table.png
$总结: 当判断条件大于3的时候,代码的执行先判断是否执行default,然后再根据算法算出对应的值.(相当于生成了一个表,程序根据算法去查询表格,取出对应的值)
④对于连贯的switch判断(case1, 2, 3...)对应的有相应的算法,那对于不连贯的判断是否是单个的比较还是有对应的算法呢,下边我们看对于不连贯的的判断,看汇编代码是否一样?
switch_001.png

switch002.png

switch003.png

switch004.png
$总结: 当判断条件不连贯且中间判断条件相隔不大时,还是会执行算法,对于中间缺失的判断,内存中会用指向default的内存地址填充.我们无法控制是否让编译器执行判断语句或者是算法运算,编译器会在效率或者内存上进行取舍.

总结:

  • switch语句分支较少的时候(小于4),没必要用switch...case语句,相当于if...else判断.
  • 各个分支常量差值较大时,编译器会在效率或者内存上进行取舍.就相当于if...else判断.
  • 在分支较多时(大于3)且分支常量差值较小的情况下,在编译的时候会生成一个表(跳转表每个地址4个字节).
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    穷人家的孩纸阅读 3,987评论 1 1
  • Swift提供了多种控制流声明。包括while循环来多次执行一个任务;if,guard和switch声明来根据确定...
    BoomLee阅读 6,017评论 0 3
  • [The Swift Programming Language 中文版]本页包含内容: Swift提供了多种流程控...
    风林山火阅读 3,715评论 0 0
  • 本章将会介绍 控制流For-In 循环While 循环If 条件语句Switch 语句控制转移语句 continu...
    寒桥阅读 4,037评论 0 0
  • 控制流 [TOC] Swift提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不...
    伍哥___阅读 3,459评论 0 0