20155326 2017-2018-1 《信息安全系统设计基础》第1次学习及课堂总结myod

虚拟机之前出了一些问题,然后我重新弄了一个新的虚拟机。

先在虚拟机里面安装了git。

安完以后在终端用命令行建立了我的系统设计这门课的专用文件夹,里面包含src、res、lib等六个文件夹来存放我的代码。

将statistics脚本放在了文件夹下,以方便统计c代码行数。

在这些准备中我用到的命令行有:

  ls                 查看文件

  cd                 打开,进入

  tab                补全目录

  mkdir              新建文件夹

  rm                 删除文件夹

  Ctrl+Shift+T       打开一个新的终端标签页

  Ctrl+Shift+W       关闭一个终端标签

  Ctrl+Shift+Q       关闭所有的的终端标签

一切准备就绪后我开始在终端开始用命令行写代码了。过程如下:

  • 在终端输入 vi (文件名)helloworld.c

  • 进入编辑页面后,按i进行编辑,代码敲完以后按Esc键退出编辑,并输入:wq,这样做是保存(w)、退出(q)。写代码时有关基本命令行有:若不小心输错了想要删除,则先按Esc,退出编辑模式,然后输入x(删除一个字符)、dd(删除一整行),然后按i或者s返回编辑模式。

  • 代码写完后输入 gcc (文件名)helloworld.c -g -o(输出文件名)test 这样做的目的是编译和调试程序。gcc(文件名)helloworld.c 是编译,gcc (文件名)helloworld.c -o 是编译并输出,输入echo $? 看程序返回值,检测代码是否运行正确。

  • 之后如果要对代码进行调试的话则输入 cgdb(输出文件名)test。调试过程是:按Esc,输入o,再按回车进入代码界面。若要在上面设置断点,则先按i(进入编辑模式),然后输入 b 5,在第五行设置断点,这是在界面下方在代码中设断点;在代码中直接设断点的方法是按Esc,然后按j或k调整断点位置(上移或者下移),确定端点放置位置后按空格可以看到设断点的那行代码前面的数字变红,即设置成功。

    断点设置好后按r,运行代码,然后按n或者s进行调试,若代码中有变量想要知道变量此时的值,则可以输入 p (变量名)i ,或者display (变量名)i,后者可以持续显示变量值的变化情况。

    若要退出调试,则按Esc、i、q即可退出。

  • 与断点有关的知识有:

        函数断点                   b (函数名)
    
        行断点                     b (行号)
    
        临时断点                   tb (行号) ,输入n后执行完断点
    
        条件断点                   b  (行号) if (条件)
    
        c (行号)                 从某个断点到下一断点
    
        p (变量名)               看某个变量的值;也可以   p  (变量名)=(一个定值)
    
                                  然后按 n 看下面有没有出错
    
        f (函数名)               执行完函数
    
        until                     执行完循环
    
        display (变量名)         可以一直显示某个变量的值
    
  • 模拟计算机处理的过程:

        gcc -E (文件名)helloworld.c -o (文件名)helloworld.i     编译预处理
    
        vi (文件名)helloworld.i                                 汇编语言
    
        gcc -S (文件名)helloworld.i -o (文件名)helloworld.s    编译
    
        gcc -c (文件名)helloworld.s -o (文件名)helloworld.o    汇编成机器码
    
        vi (文件名)helloworld.o                                 按Esc,在按:wq
    
        od -tc -tx (文件名)helloworld.o                         二进制输出
    
        objdump -d (文件名)helloworld.o                         查看反汇编后汇编码
    
        gcc (文件名)helloworld.o -o helloworld                        将编译输出的.o 文件链接为最终可执行文件
    
  • 小结

        vi     编辑代码
    
        gcc    编译运行
    
        cgdb   调试
    

截图展示如下:

  • 先在虚拟机里面安装了git。

  • 安装完git以后我在我的码云中新建了一个项目,并将其克隆在了我的虚拟机里。

  • 输入vi helloworld.c开始了代码的编辑

  • 输入i 进入编辑模式,代码输入完毕后,按:wq退出。

  • 退出后进行了编译,发现出现错误,询问同学后得知,需在main函数前加入int 否则报错。

  • gcc helloworld.c进行编译,之后ls显示出生成的a.out文件,绿色标识可执行文件,输入./helloworld运行.c文件。

  • 用gcc进行了预处理、编译、汇编,gcc -E 少一个空格导致出错

  • 以下为调试代码过程:

课堂测试总结如下

  • 题目一

操作过程如下图:

  • 题目二

操作过程如下:

  • 题目三:

操作过程如下:

要注意for不能是一个空循环,在for循环下一行设断点才能不出错。

  • 题目四:

操作过程如下:

静态库的知识的学习我参考的是http://www.cnblogs.com/jiqingwu/p/4325382.html

  • 题目五:

操作过程如下:

共享库的知识的学习我参考的是http://blog.csdn.net/jackie__y/article/details/46805217

  • 题目六

操作过程如下:

在输入的过程中要注意,使用tab键让他成为一个命令语句。在Makefile的学习过程中我学习的教程网址是http://blog.csdn.net/ruglcc/article/details/7814546/

  • myod

操作过程如下:

由于要实现的内容我不太清楚,所以我去百度了一波,我需要实现的内容。

由此可知我要做的是,编写一个myod.c程序,使之输出其十六进制及ASCII码。

实现过程如下:

编写Makefile

小结

             其实周二我花了一下午的时间一直在练习这周学习任务,但是可能还是掌握的不够熟练吧,加上偷懒没有安装vim,本来我打字就慢,加上不熟悉环境,老是打错,而修改又很麻烦,所以在老师说快一点要关闭活动一的时候,我还没把代码敲完,很遗憾这次没能把五个题目都做完,可是这五个题目也真的有点多了,对于我来说。感觉这周学到的知识还蛮多,接下来再接再厉吧!