20135210程涵 信息安全系统设计基础第二周学习总结

 

20135210程涵 信息安全系统设计基础第二周学习总结

 

学习计时:共15小时

读书:5

代码:4

作业:4

博客:2

 

一、学习目标

1.熟悉Linux系统下的开发环境

2.熟悉vi的基本操作

3.熟悉gcc编译器的基本原理

4.熟练使用gcc编译器的常用选项

5.熟练使用gdb调试技术

6.熟悉makefile基本原理及语法规范

7.掌握静态库和动态库的生成

 

二、学习任务

1.教材第一章,第七章学习:阅读并消化教材内容

2.《嵌入式Linux应用程序开发标准教程》第三章3.1-3.5的学习

3.完成实验:

练习vimtutuor

练习gcc编译运行代码

练习gdb调试代码

把上述代码中除了main函数外的代码制作成一个静态库math.a和一个共享库math.so

编写makefile,让代码编译,上述静态库和共享库的使用自动化。

 


 

 

三、学习过程

Linux下C语言编程基础

1.Vim

vim有三种模式:命令行模式、插入模式、底行模式。

 

 

 

移动光标:
  [[ 转到上一个位于第一列的"{"
  ]] 转到下一个位于第一列的"{"
  { 转到上一个空行
  } 转到下一个空行

 

  % 匹配括号移动

 

  * 匹配光标当前所在的单词,移动光标到下一个。(# 上一个)

 

进行快速调整缩进操作(普通模式下输入)

 

  >> 整行将向右缩进(使用,用于格式化代码超爽)

 

  << 整行向左回退

 

  进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数

 

调整文本位置

 

     :ce(center)命令使本行内容居中;

 

     :ri(right)命令使本行文本靠右;

 

     :le(left)命令使本行内容靠左;

 

视窗操作

 

     Ctrl+w <某些字母> 调整视窗

 

文档加密

 

  $vim -x file(创建加密文档)

 

在vim执行外部命令

 

  ! 可执行外部的shell部分

 

帮助系统

 

  普通模式下按F1打开vim自己预设的帮助文档

 

  命令行模式下输入:h shiftwidth 打开名为shiftwidth的帮助文件

 

  命令行模式下输入:ver 显示版本及参数

 

功能设定

 

  1).vim的功能设定

 

    命令行模式下输入:set nu(显示行数),设定值退出vim后不会保存。

 

    vim的配置文件~/.vimrc,打开文件进行修改。(要永久保存配置需要修改vim配置文件。)

 

  2).获取目前的设定(命令行模式下输入)

 

    :set或者:se显示所有修改过的配置

 

    :set all 显示所有的设定值

 

    :set option? 显示option的设定值

 

    :set nooption 取消当期设定值

 

  3).set功能的说明(命令行模式下输入)

 

    :set autoindent(ai) 设置自动缩进

 

    :set autowrite(aw) 设置自动存档,默认未打开

 

    :set background=dark或light,设置背景风格

 

    :set backup(bk) 设置自动备份,默认未打开

 

    : set cindent(cin) 设置C语言风格缩进

 

 


 

 

2.GCC

 

(1)编译时要加“-g”参数(参数连起来是“ESc”,相应输入的文件的后缀是“iso”)

(2)静态库

所有的编译系统都提供一种机制,将所有相关的目标模块打包成为一个单独的文件,称为静态库,可以作为链接器的输入。当链接器构造一个输出的可执行文件时,它只拷贝静态库里被应用程序引用的目标模块。

在Unix系统中,静态库以一种称为存档的特殊文件格式存放在磁盘中。存档文件是一组连接起来的可重定位目标文件的集合,有一个头部用来描述每个成员目标文件的大小和位置。存档文件由后缀.a识别。

创建静态库:①gcc -c unsgn_pow.c //unsgn_pow为函数名

               ② ar rcsv libpow.a unsgn_pow.o

          ③a - unsgn_pow.o

         ④编译主程序:gcc -o pow_test pow_test.c -L. -lpow。

(3)动态库

共享库是一个目标模块,在运行时可以加载到任意的存储器地址,并和一个在存储器中的程序链接起来。这个过程称为动态链接,是由一个叫做动态链接库的程序来执行。

      ①为动态库构造目标文件:gcc -fpic -Wall -C unsgn_pow.c

      ②生成动态可:gcc -shared -o libpow.so unsgn_pow.o

      ③链接到刚生成的动态库:gcc -o pow_test pow_test.c -L. -lpow


 

 

3.GDB

1.启动gdb的方法有以下几种:

  a)gdb <program>      program也就是执行文件,一般在当前目录下。

  b)gdb <program>      core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。

  c)gdb <program>      <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。

2.设置断点

  (gdb) break func <-------------------- 设置断点,在函数func()入口处。

  (gdb) info break <-------------------- 查看断点信息。

  (gdb) r <--------------------- 运行程序,run命令简写

  (gdb) n <--------------------- 单条语句执行,next命令简写。

  (gdb) c     <--------------------- 继续运行程序,continue命令简写。

  (gdb) p I    <--------------------- 打印变量i的值,print命令简写。

  (gdb) bt     <--------------------- 查看函数堆栈。

  (gdb) finish <--------------------- 退出函数。

  (gdb) c <--------------------- 继续运行。

  (gdb) q     <--------------------- 退出gdb。

3.其他调试命令有:

  • display 跟踪变量值的改变
  • until 跳出循环
  • finish 跳出函数
  • help 帮助

 



4.makefile

一个Makefile文件主要含有一系列的规则,每条规则包含一下内容:一个目标,即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如‘clean’;一个或多个依赖文件的列表,通常是编译目标文件所需要的其他文件。之后的一系列命令,是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,并以tab开头(初学者务必注意:是tab,而不是空格)自后便完成自动编译

 

Makefile中的宏,也称作变量。

 

变量是在makefile中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值。

 

定义变量的两种方式:

 


 

1)递归展开方式	
		VAR=var
(2)简单方式		
		VAR:=var

 


 

使用变量的格式为:$(VAR)

 

变量分为:用户自定义变量、预定义变量、自动变、环境变量。

 

 

 

 

 

一开始分开编译运行gdb结果失败,重新根据书上的指导一起运行,结果正常如下。

 

 


 

 另外,现在我们的学习模式是先自学、考试,然后老师再给我们巩固一遍。

这样的话自学还是挺耗时间的,不是说不愿意花时间,而是希望老师让我们用更有效率的学习方式。

建议老师在课上对下一周同学要自学的内容进行预先的指引,这样很多无谓的错误就不会出现在自学时间里了。

 

 

 

posted @ 2015-09-28 15:50  ClareOhno  阅读(336)  评论(1编辑  收藏  举报