信息安全系统设计基础第三周学习总结

第三周(9.21-9.27):

学习计时:共8小时

读书:3h

代码:1h

作业:4h

博客:1h

一、学习目标

1. 熟悉Linux系统下的开发环境
2. 熟悉vim的基本操作
3. 熟悉gcc编译器的基本原理
4. 熟练使用gcc编译器的常用选项
5 .熟练使用gdb调试技术
6. 熟悉makefile基本原理及语法规范
7. 掌握静态库和动态库的生成

二、学习资源

1. 教材:第一章,第七章
2. 《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5
3. 课程资料:https://www.shiyanlou.com/courses/413 实验二,课程邀请码:W7FQKW4Y
4. Vim编辑器:https://www.shiyanlou.com/courses/2
5. 教学视频:http://pan.baidu.com/s/1kTHxOFl ,可以参考第十个视频

三、学习方法

1. 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。
2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/
3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习
4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题“信息安全系统设计基础第二周学习总结”

四、学习任务

(提示:请将要求学生完成的任务、测验或思考题列在此处)

1.教材第一章,第七章学习:阅读并消化教材内容(有部分考试内容)

2.《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5的学习(本周大部分考试内容都从这出,特别是与教材重复内容)

3.完成实验并发Blog

练习vimtutuor 三遍
使用vim 输入以下代码,联系使用“K”查找帮助文档:

练习gcc编译运行代码。
练习gdb调试代码 。
把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so。
编写makefile,让代码编译,上述静态库和共享库的使用自动化。

五、后续学习预告(可选):

教材第二章《信息的表示和处理》


六、学习过程

1. 重要知识点总结梳理:
实验楼之深入理解计算机系统
实验一 Linux基础

(一)
1. Linux命令
(1)Linux中命令格式为:
command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数。
例如:ls命令,ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略。我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的内容。
2. man命令
(1)帮助文档包含:
1 Executable programs or shell commands(用户命令帮助)
2 System calls (系统调用帮助)
3 Library calls (库函数调用帮助)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd(配置文件帮助)
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
解释一下:
1是普通的Linux命令
2是系统调用,操作系统的提供的服务接口
3是库函数, C语言中的函数
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
(2)man printf,man 1 printf,man 3 printf区别
要查看相应区段的内容,就在 man 后面加上相应区段的数字即可,如:
$ man 3 printf
3. cheat命令
4.其他核心命令

和查找相关的核心命令还有find,locate,grep,whereis,which,其中:

find查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个Everything工具和locate类似).
grep 可以对文件全文检索,支持正则表达式,正则表达式也是一个重要的元知识。
whereis,which告诉你使用的命令工具装在什么地方。


实验二 Linux下C语言开发基础
(一)快捷键
(二)vim
(1.1)光标移动

程序员有几个键提示一下:

大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
几个设置
:set nu 显示行号

:set ai 自动缩行

:set ts=4 设置一个 TAB 键等于几个空格

移动光标
[[ 转到上一个位于第一列的"{"

]] 转到下一个位于第一列的"{"

{ 转到上一个空行

} 转到下一个空行

gd 转到当前光标所指的局部变量的定义
(1.2)vim的进入和退出
(1.3)文本编辑之删除
(1.4)文本编辑之插入
(1.5)文本编辑之添加“a”

(2.1)删除类命令
(2.2)更多删除类命令
(2.3)关于命令和对象
(2.4)使用计数指定动作
(2.5)使用记数以删除更多
(2.6)操作整行
(2.7)撤销类命令

(3.1)置入类命令
(3.2)替换类命令
(3.3)更改类命令
(3.4)使用c更改更多

(4.1)定位及文件状态
(4.2)搜索类命令
(4.3)配对括号的查找
(4.4)替换命令


(5.1)在vim内执行外部命令的方法
(5.2)关于保存文件的更多信息
(5.3)一个具有选择性的保存命令
(5.4)提取和合并文件


(6.1)打开类命令
(6.2)附加类命令

(7.1)获取帮助信息
(7.2)创建启动脚本
(7.3)补全功能


(三)gcc
GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。
(四)gdb
预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
链 接:gcc hello.o –o hello ;gcc -o 调用ld

建议使用CGDB,比GDB好用,熟悉VC的调试方式,可以使用DDD。 注意使用GCC编译时要加“-g”参数。 参考gdb参考卡GDB最基本的命令有:

gdb programm(启动GDB)
b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行
s 单步运行
quit 退出GDB
(五)make与makefile

实验楼之vim编辑器

vim快速入门
vim文档编辑
查找替换
高级功能入门

教材第一章

计算机系统漫游

教材第七章

链接

PDF教材3.1~3.5

第3章  Linux下C编程基础    57
3.1  Linux下C语言编程概述    57
3.1.1  C语言简单回顾    57
3.1.2  Linux下C语言编程环境概述    58
3.2  常用编辑器    59
3.2.1  进入vi    59
3.2.2  初探emacs    62
3.3  gcc编译器    67
3.3.1  gcc编译流程解析    67
3.3.2  gcc编译选项分析    70
3.4  gdb调试器    75
3.4.1  gdb使用流程    75
3.4.2  gdb基本命令    79
3.5  make工程管理器    83
3.5.1  makefile基本结构    84
3.5.2  makefile变量    84
3.5.3  makefile规则    87
3.5.4  make管理器的使用    88

http://blog.csdn.net/ruglcc/article/details/7814546/

2. 教材代码编译运行

3. 课后作业

(1)在vim中输入代码 

(2)gcc

 

(3)静态库 

(4)动态库 


七、遇到的问题及解决

1.作业

 尝试了分开编译的方式无法成功,一起编译就成功了。

 2.如何运行程序

./文件名

3.gdb 

 以上是第一天遇到的状况,当天并未解决。第二天按书上步骤编译时gcc -g add.c sub.c mul.c div.c main.c -o main ,结果gdb正常如下图

不知道是否是因为加上了选项-g。

八、其他

这周在编译上花费了很多时间,其中做了很多种错误的编译方式。我们现在的学习模式是先自学,然后考试,最后老师总结。我想建议老师可不可以老师先对我们即将要学的东西做一些提示(一点点就好)、在过程中可能遇到的问题,然后我们自学,最后考试。这样我们在遇到困难的时候就会想起老师课上曾提过就不会花费大量时间四处寻找解决办法。仅是一点建议,望老师考虑。

posted @ 2015-09-27 13:57  xixixixixi  阅读(213)  评论(1编辑  收藏  举报