zoukankan      html  css  js  c++  java
  • 信息安全系统设计基础 第二周学习笔记

    一、学习目的

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

    2. 熟悉vi的基本操作

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

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

    5 .熟练使用gdb调试技术

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

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

    二、vi的基本操作

    由于当时做实验楼的时候,网络很卡,vim的学习是在自己电脑的虚拟机上进行的。

    进入虚拟机,打开终端,输入vimtutor进行vim的学习。

    首先了解vim的键盘作用:

    普通模式下基本按键指令:

    进入插入模式:

    普通模式下的退出指令(输入':'进入命令行):

    删除指令:

    以下是在vimtutor中的教程:

    在vim学习中使用大写U进行撤销时,没有明显的变化,而小写u就直接有撤销的效果,不知是何原因。

    后来再次使用U命令时,就有撤销的效果。可能是当时操作有问题,或者当时U作用的那一行没有进行修改。

    三、gcc的使用

    GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。

    • 预处理: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

    前三步,GCC的参数连起来是“ESc”,相应输入的文件的后缀是“iso”。

    gcc的后缀名解释:

    gcc的命令选项:

    实验过程:

    实验中遇到的问题:

    没有创建hello.c文件就进行gcc编译,出现错误,没能找到该文件。后来创建了hello.c文件后,问题便迎刃而解了。

    三、gdb的运用

    在命令行中输入gdb [文件名],就可以通过一下指令运行程序了。

    • gdb programm(启动GDB)
    • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    • run 开始运行程序
    • bt 打印函数调用堆栈
    • p 查看变量值
    • c 从当前断点继续运行到下一个断点
    • n 单步运行
    • s 单步运行
    • quit 退出GDB
    • display 跟踪变量值的改变
    • until 跳出循环
    • finish 跳出函数
    • help 帮助

    五、make

    准备知识:编译,链接,静态库,共享库

    编译:把高级语言所书写的代码转换成机器可识别的指令,此时还不能够被执行,编译器通过检查高级语言的语法,函数和变量的声明是否正确!如果正确则产生中间目标文件(目标文件在Liunx中默认后缀为“.o”)

    链接:将多.o 文件,或者.o 文件和库文件链接成为可被操作系统执行的可执行程序

    静态库:又称为文档文件(Archive File) 。它是多个.o文件的集合。Linux中静态库文件的后缀为“.a

    共享库:也是多个.o 文件的集合,但是这些.o 文件时有编译器按照一种特殊的方式生成(共享库已经具备了可执行条件)

    在执行 make  之前,需要一个命名为 Makefile  的特殊文件(本文的后续将使用Makefile 作为这个特殊文件的文件名)来告诉 make 需要做什么(完成什么任务),该怎么做。

        当使用make 工具进行编译时,工程中以下几种文件在执行make 时将会被编译(重新编译): 

    1.所有的源文件没有被编译过,则对各个 源文件进行编译并进行链接,生成最后的可执行程序; 

    2.每一个在上次执行 make 之后修改过的 源代码文件在本次执行make 时将会被重新编译; 

    3.头文件在上一次执行make 之后被修改。则所有包含此头文件的 源文件在本次执make 时将会被重新编译。

    make的问题:对于静态库和动态库的知识还未能消化,希望能通过以后的实际操作来掌握,也希望老师在课堂上能着重讲讲这些知识。

  • 相关阅读:
    Spring MVC全局异常后返回JSON异常数据
    spring mvc 异常统一处理方式
    Duplicate fragment name ERROR Jetty Maven Plugin
    Android中自己定义组件和它的属性
    stl非变易算法(二)
    unix more命令
    g711u与g729比較编码格式
    MD5的加密和解密(总结)
    js 定义类对象
    润乾报表实现可反复分组报表及改进
  • 原文地址:https://www.cnblogs.com/whyfarrell/p/4842763.html
Copyright © 2011-2022 走看看