• 2019-2020-1 20175328 《信息安全系统设计基础》第一周学习总结


    2019-2020-1 20175328 信息安全系统设计基础

    第一周学习总结 
    

    一、学习内容

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

    2、熟悉vi的基本操作

    vi编辑器是Linux系统下标准的编辑器。
    vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode):

    1. 命令行模式
      控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
    2. 插入模式
      只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
    3. 底行模式
      将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。 不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

    用"vi filename"命令进入vi命令行模式。如果要想编辑文本文件,必须要转换到插入模式下,也就是按一下键盘上的"i",这样就可以对文本内容进行编辑。按键盘上的上下左右键,光标可以来回移动。

    如果想退出文本编辑模式,并且保存刚刚编辑的文本,首先点击一下键盘上的"ESC",然后输入":wq!"这样文本就保存了。如果不想保存就按一下键盘上的"ESC",输入":q!"。如果不确定保存是否成功,可以通过"cat filename" 命令来查看。

    光标的移动除了键盘上的上下左右键,也可以是小写模式下,键盘上的"h,j,k,l"
    "ctrl+b":屏幕往后移动一页
    "ctrl+f":屏幕往前移动一页
    "ctrl+u":屏幕往后移动半页
    "ctrl+d":屏幕往前移动半页
    输入任何一个整数,然后输入"shift+G" 就可以到这一页的开头了.
    大写"G":移动到文章的最后
    "$":将光标移动到行尾
    "^":将光标移到行头
    "w":将光标移到下一行头
    "b":跟"w"相反.移到上一行行头
    "e":将光标移到下一行尾.
    文本显示行号:在命令行模式下,在文本最后输入":set nu"命令

    复制:   
    「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
    「yy」:复制光标所在行到缓冲区。
    「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
    「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。

    查找:
    用"/"加上要查找的内容.例如"/hello"或者是"?hello"也是可以的.

    替换:
    「r」:替换光标所在处的字符。按一下"r"然后输入要替换的字符。 
    「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

    恢复上一次操作:
    「u」:如果误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次恢复,就相当于"CTRL +Z"的操作.

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

    命令格式:gcc [选项] [文件名] -E:仅执行编译预处理
    -S:将C代码转换为汇编代码
    -c:仅执行编译操作,不进行连接操作
    -o:指定生成的输出文件
    -I(大写i):指定头文件目录
    -l :指定程序要链接的库
    -L:指定库文件所在的目录名

    使用gcc编译工具由c语言源程序生成可执行文件的过程并不单单是一个编译的过程,而要经过四个过程:
    1)预处理:调用cpp、使用的参数为e; 2)编译:调用ccl,使用的参数为s; 3)汇编:调用as,使用的参数为c; 4)链接:调用ld,生成可执行程序。

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

    直接输入gcc hello.c -o hello 可以完成编译,这一步操作可以分成以下四步进行:
    1)将hello.c预处理输出hello.i文件:gcc -E hello.c -o hello.i(文本文件)
    可以通过vim来查看.i文件的内容
    2)将预处理输出文件hello.i汇编成hello.s文件:gcc -S hello.i -o hello.s(文本文件)
    可以通过vim来查看.s文件的内容
    3)将汇编输出文件hello.s编译输出hello.o文件:gcc -c hello.s -o hello.o(二进制文件)
    可以使用objdump -d命令反汇编查看文件。
    4)将编译输出文件hello.o链接成最终可执行文件hello:gcc hello.o -o hello

    当多个文件一起编译时,有两种编译方法(第一种方法编译时需要所有文件重新编译,第二种只重新编译修改的文件,未修改的不用重新编译):
    1)一起编译
    gcc test_a.c test_b.c -o test 或 gcc *.c –o test
    2)分别编译各个源文件后对编译输出的目标文件链接
    gcc -c test_a.c //生成test_a.o
    gcc -c test_b.c //生成test_b.
    gcc -o test_a.o test_b.o -o test

    使用vim编辑相应代码,注意.h文件应放入include中, .c文件应放入src中。代码有一个head.h文件,里面包括了对加减乘除四个函数的定义,接着是四个加减乘除函数,最后是main函数,通过调用加减乘除函数来显示计算结果。

    输入 gcc *c (一起编译所有.c文件)-o main:
    会发生错误:找不到head.h的头文件,原因是head.h被放到了另外一个文件夹中,所以编译器在当前文件夹找不到它。
    输入 gcc -I/头文件所在路径 *.c -o main:在编译时使用-i来指定头文件所在的路径,可以编译成功。

    5、熟练使用gdb调试技术

    gdb调试的是可执行文件,而不是源程序

    • 使用-g编译选项的gcc命令来编译源程序
    • 如:gcc -g test.c -o test
    • 通过gdb test来启动gdb

    1)help(列出了gdb命令的种类)
    2)help all(查看所有的命令)
    3)help (查看某一种类的命令)
    4)help (查看命令的帮助)

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

    makefile关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个 Shell脚本一样,其中也可以执行操作系统的命令。
    makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

    7、掌握静态库和动态库的生成与调用方法

    静态库(执行main可以调用静态库):
    1)输入“gcc -c -I/头文件所在路径 add.c sub.c mul.c div.c”生成.o文件
    2)输入“ar rcvs libmath.a add.o sub.o mul.o div.o”生成静态库
    3)输入“gcc main.c -o main -I/头文件所在路径 -L. –lmath”生成可执行文件main
    注:

    • -l参数用来指定程序要链接的库,-l参数紧接着就是库名。
    • -L参数跟着的是库文件所在的目录名。
    • gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到的静态库文件名来查找静态库文件。

    动态库:
    1)输入“gcc -fPIC -c -I/头文件所在路径 add.c sub.c mul.c div.c”生成.o文件
    2)输入“gcc -shared -o libmath.so add.o sub.o mul.o div.o”生成动态库
    3)将文件libmath.so复制到目录/usr/lib中后,再输入“gcc main.c -o main -I/头文件所在路径 -L. lmath”生成可执行文件main

    8、理解C程序中模块的概仿,模块分解的“高内聚,低耦合”的原则

    9、了解链接的概念

    链接(Link)其实就是一个“打包”的过程,它将所有二进制形式的目标文件和系统组件组合成一个可执行文件。完成链接的过程也需要一个特殊的软件,叫做链接器(Linker)。

  • 相关阅读:
    IOS RunLoop理解(参考YYKit)
    与个推人员的沟通
    idea报错:找不到或无法加载主类
    linux couldnt resolve host mirrors.aliyun.com解决方法
    【Linux】简单明了查看内存使用和ubuntu的版本号及位数
    【Linux】scp“免密” 远程copy较多文件
    【Repo】推送一个已有的代码到新的 gerrit 服务器
    Android之Monkey全参数(包含隐藏参数)
    Android系统adb命令查看CPU与内存使用率
    adb 命令连接指定设备
  • 原文地址:https://www.cnblogs.com/seven-moon/p/11569763.html
Copyright © 2020-2023  润新知