码迷,mamicode.com
首页 > 其他好文 > 详细

2017-2018-1 20155336 《信息安全系统设计基础》第八周课堂测试

时间:2017-11-12 21:43:28      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:调试   除法   blog   linu   www.   char   机器码   数组   没有   

2017-2018-1 20155336 《信息安全系统设计基础》第八周课堂测试

1.求命令行传入整数参数的和

  • 参考 http://www.cnblogs.com/rocedu/p/6766748.html#SECCLA 在Linux下完成“求命令行传入整数参数的和”

  • 测试代码传入自己的8位学号

  • 上方提交代码

  • 附件提交运行测试截图

解答:

  • 编写代码

    #include <stdio.h>
    void main(int argc,char** argv)
    {
    int i,a,sum=0;
    for(i=1;i<argc;i++)
    {
    a=atoi(argv[i]);
    sum = sum +a;
    }
    printf("%d\n",sum);
    }
    

代码调试中的问题及解决方法

  • 问题就是粗心,没有注意到是二维数组,然后怎么编译都没用通过,浪费了很多时间。
  • 解决方法就是./a.out 的后面的学号写成两个数字就可以啦!

运行结果

技术分享

2.汇编

  • 把第一个练习中的代码在X86-64(Ubuntu)中反汇编,给出汇编代码和机器码的截图

  • 把X86-64汇编翻译成Y86-64汇编,并给出相应机器码的截图(使用附件中的Y86-64模拟器)

代码调试中的问题及解决方法

  • 问题一: 在安装Y86的时候出现了这个问题

    技术分享

  • 解决:通过输入命令sudo rm /var/cache/apt/archives/locksudo rm /var/lib/dpkg/lock,以及sudo rm /var/lib/dpkg/lock之后成功解除占用。

    技术分享

运行结果

  • X86-64汇编代码

    技术分享

  • X86-64机器码

    技术分享

3.实现daytime

  • 基于socket 使用教材的csapp.h csapp.c,实现daytime(13)服务器(端口我们使用13+后三位学号)和客户端
  • 服务器响应消息格式是

    客户端IP:XXXX
    服务器实现者学号:XXXXXXXX
    当前时间: XX:XX:XX
    

课下测试1

  • 1 完成家庭作业4.47,4.48,4.49
  • 2 相应代码反汇编成X86-64汇编
  • 3 把上述X86-64汇编翻译成Y86汇编,并给出相应机器码

4.47

解题思路:

  • 将题目所给的数组元素代码转换成指针索引的代码

具体方法为:将指针赋给数组的头地址,然后按位移动指代

    C格式:int *data=a;

    *(data+i);
  • 将所得的C程序汇编一下获得相应的汇编代码

  • gcc -S .c -o

  • 去掉相应的“.”

  • 将所得的Y86代码与用机器产生的反汇编代码比对,验证准确性

解题过程:

技术分享

技术分享

对比及修改

技术分享 技术分享

注意事项

  • 对应的指针代码要在能运行与检测的基础上构建,在调用相应的冒泡程序时,因先利用GCC -G后调试一下。不然的话在没有可执行的程序做保证的话会由于书写错误或者指代错误等错误因素导致数据意外存储而没有报错,这样无法得到汇编及正确的代码
  • 在可执行的C代码汇编版本中:movl指令对应的Y86指令有三个,要注意区分三者后带的参数类型
  • Y86没有相应的乘除法操作,要转换成加减或者与,抑或运算完成,为方便起见,规定的数据不讨论符号,对于乘除法操作,以最优解替换

2017-2018-1 20155336 《信息安全系统设计基础》第八周课堂测试

标签:调试   除法   blog   linu   www.   char   机器码   数组   没有   

原文地址:http://www.cnblogs.com/hxl681207/p/7822808.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!