20165324 《信息安全系统设计基础》 第一周

20165324 《信息安全系统设计基础》 第一周

第一章计算机系统漫游知识点学习

gcc编译器与静、动态库

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

  • 具体代码为:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello
//或者直接输入:
gcc hello.c -o hello
  • 一个项目的目录结构:

  • 静态函数库:名字一般为libxxx.a,整合整个函数库的所有数据进目标代码中,文件较大。

  • 动态函数库:名字一般为libxxx.so,程序运行环境必须提供相应的库。

调试器gdb

  • 使用-g编译选项的gcc命令来编译源程序。如:gcc -g test.c -o test
  • 通过gdb test来启动gdb。gdb调试的是可执行文件。
  • 使用介绍:

Makefile

  • Makefile关系工程的编译规则,好处是自动化编译。
  • 书写规则:targets为文件名,command为命令行,必须以[Tab键]开头,prerequisites为目标所依赖的文件(目标)。
targets: prerequisites
    command
  • 变量的使用:定义一个变量,需要在一行的开始定义这个变量(一般大写),后面跟一个-号,=号后面即为设定的变量值。使用变量,用一个$符号来引用变量,变量名需要放在$后的()里。如:
objects=main.o add.o sub.o div.o mul.o  
$(objects)

蓝墨云任务

任务一:

  1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
  2. 用Vi输入图中代码,并用gcc编译通过
  3. 在Vi中使用K查找printf的帮助文档
  4. 提交vi编辑过程截图,要全屏,包含自己的学号信息
  5. 把代码推送到代码托管平台
  • 任务截图:

任务二:

  1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码
  2. 生成的可执行文件中要有自己的学号
  3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
  4. 代码推送到代码托管平台
  • 任务截图

任务三:

  1. 用gcc -g编译vi输入的代码;
  2. 在main函数中设置一个行断点;
  3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点;
  4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
  5. 代码推送到代码托管平台;
  • 任务截图

任务四:

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
  2. 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
  3. 代码推送到代码托管平台;
  • 任务截图:

任务五:

  1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
  2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息;
  3. 代码推送到代码托管平台;
  • 任务截图:

任务六:

  1. 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
  2. 提交Make过程截图,要全屏,包含自己的学号信息
  3. 代码推送到代码托管平台;
  • 任务截图

原文地址:https://www.cnblogs.com/20165324hcj/p/9693662.html