• 2017-2018-1 学号 《信息安全系统设计基础》第6周课堂测试补交


    2017-2018-1 学号 《信息安全系统设计基础》第6周课堂测试补交

    第六周课上测试补交

    测试3

    1. 编写一个程序 “week0603学号.c",运行下面代码:
      1 short int v = -学号后四位
      2 unsigned short uv = (unsigned short) v
      3 printf("v = %d, uv = %u ", v, uv);

    2. 在第三行设置断点用gdb调试,用p /x v; p /x uv 查看变量的值,提交调试结果截图,要全屏,要包含自己的学号信息

    3 分析p /x v; p /x uv 与程序运行结果的不同和联系

    要进行gdb测试,首先要把调试信息加到可执行文件中,然后对gdbtest进行gdb调试

    【图片】【】【】【】

    输入“l”显示文件中的内容,然后设置断点,输入变量进行输出

    【图片】【】【】【】

    测试5

    1 通过输入gcc -S -o main.s main.c 将下面c程序”week0603学号.c“编译成汇编代码
    int g(int x){
    return x+3;
    }
    int f(int x){
    int i = 学号后两位;
    return g(x)+i;
    }
    int main(void){
    return f(8)+1;
    }

    1. 参考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟踪汇编代码,在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况。提交照片,要有学号信息。

    先把题目中的代码编译,在进入gdb调试

    最后得到计算结果

    ch02课下作业

    完成教材p97 2.96 2.97,要有完备的测试

    #include <stdio.h>
    #include <limits.h>
    typedef unsigned float_bits;
    
    int float_f2i(float_bits f)
    {
        unsigned sign=f>>31;
        unsigned exp = (f>>23)&0xff;
        unsigned frac = f&0x7fffff;
    
        if(exp == 0)
            return 0;
        if(exp == 0xff)
            return 0x80000000;
        unsigned m = frac+0x800000;
        int e =exp-127;
        if(e<0)
            return 0;
        else if(e>31)
            return 0x80000000;
        else if(e<23)
            m>>(23-e);
        else
            m<<(e-23);
        return sign<<31|m;
    }
    
    int main()
    {
        int i;
        unsigned u;
        float f;
        for(u=0;u<=10;u++)
        {
            f=*((float*)&u);
            i=float_f2i(u);
            if((int)f == i)
                printf("%u ok
    ",u);
            else
            {
                printf("error");
                return -1;
            }
        }
    }
    

    运行

    #include<stdio.h>
    #include<limits.h>
    
    typedef unsigned float_bits;
    float_bits float_i2f(int i)
    {
        unsigned u=(unsigned)i;
        if(!u)
            return 0u;
        unsigned sign=u>>31;
        unsigned exp,frac,f;
        if(sign)
            u=(~u)+1;
        unsigned j,leftmost_one;
        for(j=0;j<32;j++)
        {
            leftmost_one=u&(0x80000000>>j);
            if(leftmost_one)
                break;
        }
        exp=158u-j;
        f=u<<j<<1;
        unsigned last_bit=(f&0x200)>>9;
        unsigned truncation=f&0x1ff;
        if(truncation<0x100)
            frac=f>>9;
        else if(truncation>0x100)
            frac=(f>>9)+1;
        else
        {
            if(last_bit)
                frac=(f>>9)+1;
            else
                frac=f>>9;
        }
        if(frac>>23)
        {
            ++exp;
            frac=0;
        }
        return (sign<<31)|(exp<<23)|frac;
    }
    int main()
    {
        int i;
        unsigned r;
        float f,fr;
        for(i=INT_MIN;i<INT_MAX;i++)
        {
            r=float_i2f(i);
            fr=*((float*)&r);
            f=(float)i;
            if(fr==f)
                printf("%d:ok
    ",i);
            else
            {
                printf("%d: %f %f error
    ",i,f,fr);
                return -1;
            }
        }
    }
    

    运行

    缓冲区溢出漏洞实验

    还没做完,做完我再来修改照片部落格

  • 相关阅读:
    java 之 对象与垃圾回收
    Java 之 内部类
    java 接口(interface)
    抽象类
    Java之fianl修饰符
    类的继承
    上传图片
    一般处理程序 给图片添加文字水印
    socket
    初识linq,lambda表达式
  • 原文地址:https://www.cnblogs.com/lnaswxc/p/7751803.html
Copyright © 2020-2023  润新知