信息安全综合训练RE_lab3(自用、记录)

组长 组员 组员
E41714007 E41714001 E41714020

Question 1

1.1 题目要求

  1. 阅读
    然后回答问题:
    What does this code do?
    在这里插入图片描述
    一样的代码,只不过换成了Java语言
Java 1.8 compiler:


  public boolean f(char);
    descriptor: (C)Z
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: iload_1
         1: bipush        97
         3: if_icmplt     14
         6: iload_1
         7: bipush        122
         9: if_icmpgt     14
        12: iconst_1
        13: ireturn
        14: iload_1
        15: bipush        65
        17: if_icmplt     28
        20: iload_1
        21: bipush        90
        23: if_icmpgt     28
        26: iconst_1
        27: ireturn
        28: iconst_0
        29: ireturn

1.2 解答

由于Java语言类似,故以下只解释一种

Optimizing csc .NET compiler from MSVS 2015 (/o switch), ildasm output:


  .method public hidebysig static bool  f(char a) cil managed
  {
   
    // Code size       26 (0x1a)	//代码大小 26(0x1a)
    .maxstack  8					//计算出计算堆栈的能存几个值(8个)
    IL_0000:  ldarg.0				//把this指针压入栈中
    IL_0001:  ldc.i4.s   97			//把int32的值(97)推送到计算堆栈
    IL_0003:  blt.s      IL_000c	//如果第一个值<第二个值,跳转到IL_000c位置

    IL_0005:  ldarg.0				//把this指针压入栈中
    IL_0006:  ldc.i4.s   122		//把int32的值(122)推送到计算堆栈
    IL_0008:  bgt.s      IL_000c	//如果第一个值>第二个值,跳转到IL_000c位置

    IL_000a:  ldc.i4.1				//把int32的值(1)推送到计算堆栈
    IL_000b:  ret					//把1从调用方的计算堆栈推送到被调用方的计算堆栈上

    IL_000c:  ldarg.0				//把this指针压入栈中
    IL_000d:  ldc.i4.s   65			//把int32的值(65)推送到计算堆栈
    IL_000f:  blt.s      IL_0018	//如果第一个值<第二个值,跳转到IL_0018位置

    IL_0011:  ldarg.0				//把this指针压入栈中
    IL_0012:  ldc.i4.s   90			//把int32的值(90)推送到计算堆栈
    IL_0014:  bgt.s      IL_0018	//如果第一个值>第二个值,跳转到IL_0018位置

    IL_0016:  ldc.i4.1				//把int32的值(1)推送到计算堆栈
    IL_0017:  ret					//把1从调用方的计算堆栈推送到被调用方的计算堆栈上

    IL_0018:  ldc.i4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值