• 2017-2018-1 20155314 《信息安全系统设计基础》第5周学习总结


    2017-2018-1 20155314 《信息安全系统设计基础》第5周学习总结

    教材学习内容总结

    学习目标

    • 理解逆向的概念
    • 掌握X86汇编基础,能够阅读(反)汇编代码
    • 了解ISA(指令集体系结构)
    • 理解函数调用栈帧的概念,并能用GDB进行调试

    教材内容提炼

    第2章 信息的表示和处理

    • 三种最重要的数字表示
      • 无符号编码:表示大于或等于零的数字
      • 补码编码:表示有符号整数的最常见方式
      • 浮点数编码:表示实数的科学记数法的以2为基数的版本
    • 信息存储
      • 虚拟内存:机器级程序将内存视为一个非常大的字节数组,称为虚拟内存
      • 十六进制表示法
      • 字数据大小
        • 一个字长为w位的机器,虚拟地址的范围为0~2w-1,程序最多访问2w个字节
        • 向后兼容:大多数64位机器也可以运行为32位机器编译的程序
        • ISO C99引入一类数据类型,其数据大小是固定的,不随编译器和机器设置而变化
          • int32_t:4字节
          • int64_t:8字节
        • 对关键字的顺序以及包括还是省略可选关键字来说,C语言允许存在多种形式:如 unsigned longunsigned long intlong unsignedlong unsigned int均等价
      • 寻址和字节顺序
        • 小端法:最低有效字节在最前面
        • 大端法:最高有效字节在最前面
      • 表示字符串
      • 表示代码
      • 布尔代数简介
        • 布尔环中加法运算是,每个元素的加法逆元都是它自己本身,即对于任何值a,**aa=0**
      • C语言中的位级运算(按位布尔运算)
        • |
        • &
        • ~
        • ^
      • C语言中的逻辑运算(逻辑运算认为所有非零的参数都表示TRUE(返回1),而参数0表示FALSE(返回0))
        • ||
        • &&
        • !
      • C语言中的移位运算
        • 左移
        • 右移
          • 逻辑右移:在左端补k个0
          • 算术右移:在左端补k个最高有效位的值
    • 整数表示
      • 整型数据类型
      • 无符号数的编码
      • 补码编码
      • 有符号数和无符号数之间的转换
      • C语言中的有符号数与无符号数
      • 扩展一个数字的位表示
      • 截断数字
      • 关于有符号数与无符号数的建议
    • 整数运算
      • 无符号加法
      • 补码加法
      • 补码的非
      • 无符号乘法
      • 补码乘法
      • 乘以常数
      • 除以2的幂
      • 关于整数运算的最后思考
    • 浮点数
      • 二进制小数
      • IEEE浮点表示
      • 数字示例
      • 舍入
      • 浮点运算
      • C语言中的浮点数
        • int转成float:数字不会溢出,但可能被舍入
        • intfloat转成double:能保留精确的数值
        • double转成float:值可能溢出成+∞或-∞,还可能被舍入
        • floatdouble转成int:值将会向零舍入

    课后实践:mybash

    实践要求

    加分题-mybash的实现

    • 使用fork,exec,wait实现mybash
    • 写出伪代码,产品代码和测试代码
    • 发表知识理解,实现过程和问题解决的博客(包含代码托管链接)

    我的代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    
    #define MAXARGS 20              
    #define ARGLEN 100             
    
    int mybash20155314(char *arglist[])
    { 
        int pc,pr;
        pc=fork();
        pr=wait(NULL);
        if(pc==0) execute(arglist);
        else return 0;
    }
    
    int execute(char *arglist[])
    {
        execvp(arglist[0],arglist);        
        perror("execvp failed");
        exit(1);
    }
    
    char *makestring(char *buf)
    {
        char  *cp;
        buf[strlen(buf)-1] = '';      
        cp = malloc( strlen(buf)+1 );       
        if ( cp == NULL ){          
            fprintf(stderr,"no memory
    ");
            exit(1);
        }
        strcpy(cp, buf);        
        return cp;          
    }
    
    int main() {
        char *arglist[MAXARGS + 1];
        int numargs;
        char argbuf[ARGLEN];
    
        numargs = 0;
        while (numargs < MAXARGS) {
            printf("Arg[%d]? ", numargs);
            if (fgets(argbuf, ARGLEN, stdin) && *argbuf != '
    ')
                arglist[numargs++] = makestring(argbuf);
            else {
                if (numargs > 0) {
                    arglist[numargs] = NULL;
                    mybash20155314(arglist);
                    numargs = 0;
                }
            }
        }
        return 0;
    }
    

    运行截图

    Nypwt.png

    教材学习中的问题和解决过程

    • 问题1:什么是GCC?
      • GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。
    • 问题2:什么是汇编和反汇编?
      • 汇编(Assembly):把汇编语言翻译成机器语言的过程
      • 反汇编(Disassembly):把目标代码转为汇编代码的过程
    • 问题3:什么是GUI?
      • 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

    代码调试中的问题和解决过程

    macOS High Sierra下终端man命令中文显示问题

    NsxOA.png

    解决方法

    NySeI.png

    代码托管

    N6kAx.png

    上周考试错题总结

    1. main.c 调用了静态库libmath.a中的函数,编译main.c的命令是()

      A. gcc -static main.c ./libmath.a -o main

      B. gcc -static main.c -L. -lmath -o main

      C. gcc -static main.c -L. -llibmath.a -o main

      D. gcc -static main.o ./libmath.a -o main

      【错选】B D

      【答案】A B

    2. dll,so文件的链接是运行在()

      A. 编译时

      B. 加载时

      C. 运行时

      D. 链接时

      【错选】D

      【答案】C

    结对及互评

    本周结对学习情况

    • 20155323
    • 结对学习内容
      • 教材第1章 计算机系统漫游

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20

    尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
    耗时估计的公式
    :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:5小时

    • 实际学习时间:2小时

    参考资料

  • 相关阅读:
    vim
    echo
    kill/xkill/killall/pkill/pidof
    ssh
    使用GSON
    使用GSON
    解析JSON
    解析JSON
    Pull解析方式
    Pull解析方式
  • 原文地址:https://www.cnblogs.com/crazymosquito/p/7712472.html
Copyright © 2020-2023  润新知