其他分享
首页 > 其他分享> > 2022-2023-1 20201324《信息安全系统设计与实现(上)》第2章

2022-2023-1 20201324《信息安全系统设计与实现(上)》第2章

作者:互联网

第2章 编程背景

目录

1 Linux中的文本编辑器

vim

①简介

vim有3种不同的操作模式,分别是

vim启动时,处于默认的命令模式,在该模式下,大多数键表示特殊命令。移动光标的命令键示例如下:

- h:将光标向左移动一个字符
- l:将光标向右移动一个字符
- j:将光标向下移动一个字符
- k:将光标向上移动一个字符

在X-window中使用vim时,也可以通过箭头键来完成光标的移动。要输入文本进行编辑,用户必须输入i(插入)或a(追加)命令将vim切换到插入模式

- i:切换到插入模式,插入文本。
- a:切换到插入模式,追加文本。
  要退出插入模式,请按ESC键一次或多次。在命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim:
- :w:写入(保存)文件。
- :q:退出vim。
- :wq:保存并退出。
- :q!:不保存更改,强制退出。

虽然许多Unix用户已经习惯了vim不同的操作模式,但是其他用户可能认为与其他基于图形用户界面(GUI)的编辑器相比,vim使用起来既不自然也不方便。以下类型的编辑器属于通常所说的所见即所得(WYSIWYG)编辑器。在WYSIWYG编辑器中,用户可以输入文本,用箭头键移动光标,和普通的文本输入一样。通常,通过输入一个特殊的meta键,接着输入一个字母键即可创建命令。例如:

- Ctrl+C:中止或退出。
- Ctrl+K:删除行到缓冲区。
- Ctrl+Y:从缓冲区内容中复制或粘贴。
- Ctrl+S:保存已编辑文本等。

②操作过程

  1. 安装sudo apt install - y vim

    我这里报错,教程上的方法也不行,我猜测应该换源

​ 之前换过一次源,可还是没效果,这次用了中科大源,终于解决了

​ 参考linux虚拟机换源

​ 换源后下载,成功

2 程序开发

(1)程序开发步骤

  1. 创建源文件

  2. 用gcc把源文件转换成二进制可执行文件a.out。如: gcc t1.c t2.c

    gcc是一个程序,包含三个主要步骤:

    (1)将C源文件转换为汇编代码文件,即将.c文件转为.s文件。

    (2)将汇编代码转换为目标代码,即将.s文件转为.o文件。

    (3)链接。

    • 将.o文件的所有代码段组合成单一代码段。
    • 将所有数据段组合成单一数据段。
    • 将所有BSS段组合成单一bss段。
    • 使用.o文件的重定位信息调整组合指针、数据和bss段的偏移量。
    • 用符号表来解析各个.o文件之间的交叉引用。

    推荐博客如何在linux(ubantu)操作系统运行c语言文件,介绍了使用自带的文本编辑器和vim两种方式

    编译时我又出现了问题,报错说编译失败,找不到stdio.h。又是一波查教程,最后还是换源。这次把清华源也加进去了。

    参考博客:fatal error: stdio.h: No such file or directory

    换源的时候又遇到另一个报错:E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)

    最终完美解决!

    总的来说步骤如下:

    1. 找到保存的文件,在该目录下“右键鼠标”,选择“在终端打开”
    2. 输入“ls”命令看到本目录下有我们的文件“hello.c”,

    (如果你想要运行c++文件,那么刚刚在创建文件的时候要选择语言为cpp)

    1. 使用命令”gcc hello.c -o hello“将c语言文件”hello.c“编译成”hello“的可执行文件,
    2. 最后用”./hello“运行该文件,可以看到输出结果为”Hello world!“。

(2)静态与动态链接

创建二进制可执行文件的两种方式:静态链接与动态链接

  1. 静态链接

    链接器将所有必要的库函数代码和数据纳入a.out文件中。这使得a.out文件完整、独立,但通常非常大

  2. 动态链接

(3)可执行文件

虽然默认的二进制可执行文件名为a.out,但实际文件格式可变。其中包括

  1. 二进制可执行平面文件
  2. a.out可执行文件
  3. ELF可执行文件(Linux中默认的二进制可执行文件,更适合动态链接)

(4)程序执行过程

  1. 读取a.out文件头,以确定所需的总内存大小,包含栈空间大小:TotalSize = _brk +stackSize
  2. sh从总大小中分配一个内存区给执行映像
  3. sh放弃旧映像,开始执行新映像
  4. 执行从crt0.o开始,调用main()

3 链接库

(1)创建静态链接库

gcc -c mysum.c
ar rcs libmylib.a mysum.o
gcc -static t.c -L. -lmylib
a.out

静态库的构建:
A.编辑库的实现代码和接口声明

B、编译成目标文件

命令:gcc -c calc.c
gcc -c show.c
生成.o文件
C、打包成静态库
命令:ar -r libmath.a calc.o show.o
D、编译并链接静态库
命令:gcc main.c libmath.a
最后生成一个a.out可执行文件
使用命令:./a.out运行程序。

(2)创建动态链接库

gcc -c -fPIC mysum.c
gcc -shared -o libmylib.so mysum.o
gcc t.c -L. -lmylib
export LD_LIBRARY_PATH=./
a.out

网络分享:Linux学习一:创建静态库以及静态库链接,并执行a.out文件

什么是静态库?
1、静态库的本质就是将目标文件打包成一个文件。
2、链接静态库就是将库中被调用的代码复制到调用模块中。
3、静态库的扩展名是.a 例:libxxx.a

4 GDB调试工具

  1. 创建makefile:

    t: t.c
    gcc -g -o t t.c
    
  2. 然后使用EMACS编辑c语言源文件。

  3. 编译源代码,打开Tools菜单,选择编译或输入gcc -g -o t t.c命令

  4. 启动GDB

  5. 多窗口GDB:从GDB菜单中,选择Gud->GDB-MI->Display Other Windows

5 C语言相关

标签:文件,gcc,静态,vim,2022,2023,20201324,链接,out
来源: https://www.cnblogs.com/cqszxy2020/p/16656416.html