20155326 2017-2018-1 《信息安全系统设计基础》第2周学习及课堂总结myod
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,本来我打字就慢,加上不熟悉环境,老是打错,而修改又很麻烦,所以在老师说快一点要关闭活动一的时候,我还没把代码敲完,很遗憾这次没能把五个题目都做完,可是这五个题目也真的有点多了,对于我来说。感觉这周学到的知识还蛮多,接下来再接再厉吧!
20155326 2017-2018-1 《信息安全系统设计基础》第2周学习及课堂总结myod的更多相关文章
- 20165223《信息安全系统设计基础》第九周学习总结 & 第八周课上测试
目录 [第九周学习总结] 教材内容总结 [第八周课上测试] (一)求命令行传入整数参数的和 (二)练习Y86-64模拟器汇编 (三)基于socket实现daytime(13)服务器和客户端 参考资料 ...
- 2017-2018-1 20155326 《信息安全系统设计基础》第四周学习总结及myod改进版的补交
2017-2018-1 20155326 <信息安全系统设计基础>第四周学习总结及myod改进版的补交 学习内容 补充完成课上没有完成的内容 学习教材附录A,第十章内容 参考别出心裁的Li ...
- 2017-2018-1 20155305 《信息安全系统设计基础》第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客)
2017-2018-1 20155305 <信息安全系统设计基础>第四周学习总结(课堂提交作业未来得及提交码云链接myod补充博客) 课堂提交题目要求 编写MyOD.java 用java ...
- 2017-2018-1 20155318 《信息安全系统设计基础》第九周课下实践——实现mypwd
2017-2018-1 20155318 <信息安全系统设计基础>第九周课下实践--实现mypwd 相关知识 man -k 查找含有关键字的内容 与管道命令结合使用:man -k k1 | ...
- 2017-2018-3 20155337《信息安全系统设计基础》 pwd指令学习
2017-2018-3 20155337<信息安全系统设计基础> pwd指令学习 任务要求 学习pwd指令 研究pwd实现需要的系统调用(man -k:grep),写出伪代码 实现mypw ...
- 20155216 2017-2018-1 《信息安全系统设计基础》第二周课堂练习补交以及Myod的实现
20155216 2017-2018-1 <信息安全系统设计基础>第二周课堂练习补交 课堂测试3:行断点的设置 运行截图: 未完成原因:课前未安装 cgdb 具体步骤: 1.输入命令:gc ...
- 2017-2018-1 20155232 《信息安全系统设计基础》第四周学习总结以及课上myod练习补充博客
2017-2018-1 20155232 <信息安全系统设计基础>第四周学习总结以及课上myod练习补充博客 课上myod练习 1 参考教材第十章内容 2 用Linux IO相关系统调用编 ...
- 20155305《信息安全系统设计基础》10月18日课堂 fork,exic,wait
20155305<信息安全系统设计基础>10月18日课堂 fork,exic,wait fork()函数 1.fork函数作用 一般来讲, 我们编写1个普通的c程序, 运行这个程序直到程序 ...
- 2017-2018-1 20155320 《信息安全系统设计基础》第四周学习总结(课堂实践补交+myhead与mytail加分项目)
2017-2018-1 20155320 <信息安全系统设计基础>第四周学习总结(课堂实践补交+myhead与mytail实现) 课堂实践内容 1 参考教材第十章内容 2 用Linux I ...
- # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
20155337 2017-2018-1 <信息安全系统设计基础>第二周课堂实践+myod 因为在课上已经提交了四个实验,还欠缺最后一个实验,反省一下自己还是操作不熟练,平时在课下应该多多 ...
随机推荐
- 访问WebServcie遇到配额不足的时候,请增加配额
常常遇到的报错: 1.错误一: Error in deserializing body of reply message for operation 'GetArticleInfo'.,StackTr ...
- 201621123008 《Java程序设计》第12周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何 ...
- Java 算法(一)贪心算法
Java 算法(一)贪心算法 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 一.贪心算法 什么是贪心算法?是指在对问题进行求 ...
- anaconda的源配置的坑
anaconda是一个python的科学计算的包集合,它提供了一个非常好用的包管理器 conda,类似于pip. 为了速度(不仅为了速度,没有清华源你就被墙了,速度为0),我们使用清华源: 在类uni ...
- spring security 4.2后出现CouldnotverifytheprovidedCSRFtokenbecauseyoursessionwasnotfound
升级到spring security 4.2后,登录不了,出现下面的错误 WARN DefaultHandlerExceptionResolver:361 - Failed to bind reque ...
- centos下安装nodejs
1.首先要安装gcc, # yum install libtool automake autoconf gcc-c++ openssl-devel 2.可以进入某个目录,下载NodeJS v0.10. ...
- spring学习 十四 注解AOP 通知传递参数
我们在对切点进行增强时,不建议对切点进行任何修改,因此不加以使用@PointCut注解打在切点上,尽量只在Advice上打注解(Before,After等),如果要在通知中接受切点的参数,可以使用Jo ...
- java JNI 实现原理 (二) Linux 下如何 load JNILibrary
在博客java JNI (一)虚拟机中classloader的JNILibrary 中讨论了java中的Library 是由classloader 来load的,那我们来看看 classloader是 ...
- vue 开发系列(二) vue ajax 拦截
概要说明 在开发的过程中,我们需要通过AJAX请求,访问后台获取数据,这个获取数据的时候,当然需要后台需要时登录状态才能访问数据,当没有登录的情况,这个时候我们需要跳转到登录界面进行登录. 如果每次请 ...
- Le Chapitre VIII
J'appris bien vite à mieux connaître cette fleur. Il y avait toujours eu, sur la planète du petit pr ...