2018-2019-1 20165228 苏祚堃《信息安全系统设计基础》第一周学习总结

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

教材学习内容总结

GCC编译:

  • 预处理: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
  • 带head.h的头文件编译:需要使用"-I + 头文件路径"

    例:gcc -I include src/*.c -o bin/xx

    注意使用GCC编译时要加“-g”参数

GDB基本命令

  • gdb programm(启动GDB)
  • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
  • run 开始运行程序
  • bt 打印函数调用堆栈
  • p 查看变量值
  • c 从当前断点继续运行到下一个断点
  • n 单步运行
  • s 单步运行
  • quit 退出GDB
  • 大写“K”可以用来查找函数的帮助信息:查看 man page,命令模式下,将光标放在函数名上,按"K"可以直接察看 man page。
  • 断点调试:

    break x (x表示设置断点位置的行号)

    delete x (x表示删除断点的行号)

    list 显示带行数的代码

    start+cotinue=run 运行

    s+c=r

    watch b 观察变量b的值,变化时程序停止

    s 进入函数内部

    n 单步调试

    quit 退出gdb

    info b 查看断点信息并保存

    save breakpoint fig.dp 保存断点到fig.dp中

    gdb hello2 -x fig.dp 调试时读取保存断点文件

静态库的生成

例:

1、输入 "gcc (-g) -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 (-g) main.c -o main -I/头文件所在路径 -L. -lmath" 生成可执行文件main

注意: -I参数用来指定程序要链接的库,-I参数紧接着就是库名

-L参数跟着的是库文件所在的目录名

gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到静态库文件名来查找静态库文件

动态库的生成

例:

1、输入 "gcc (-g) -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 (-g) main.c -o main -I/头文件所在路径 -L. -lmath"生成可执行文件main

Makefile文件的书写格式:

  vim Makefile

  文件类型:由哪个文件得到

  得到过程

  例如:

  main:main.o //可执行文件main是由目标文件main.o得到。
  gcc main.o –o main //得到过程是将main.o编译成main文件。
  main.o:main.c
  gcc -c main.c -o main.o

  在Makefile文件中一定要将每一个.c文件按执行顺序先编译成.o文件,再按顺序将.o文件编译成可执行文件。

  每次编译过后会产生很多的.o文件,对于程序运行没什么太大意义,反而会占内存,所以我们也可以在Makefile文件中添加清除命令(clean),如:

    .PHONY:clean   

  clean: 删除所有文件类型为.o的文件

  rm –rf *.o

  编译和执行(make:编译, 。/all:执行)

代码调试中的问题和解决过程

  • 问题1:在编译时,报错"ld returned 1 exit status"
  • 问题1解决方案:在查找资料后,指示编译方式或编译指令有误。最后发现是指令中的I与小写L混淆了。
  • 问题2:在做测试的时候,不会使用GDB设置断点
  • 问题2解决方案:在参考linux c之gdb常用断点调试总结,学习了(条件)断点的设置和保存,以及一些简单的GDB指令。
  • 问题3:GDB调试问题“No source file named file.c. Make breakpoint pending on future shared library load?”和“没有符号表被读取。请使用"file" 命令”
  • 问题3解决方案:在编译的时候,没有加-g的选项,导致没有产生调试符号。

代码托管

(statistics.sh脚本的运行结果截图)

其他(感悟、思考等,可选)

在学习本门课程的第一周,就对忘了很多的C语言进行了深入的学习。比如编译这一步骤,之前只会用codeblock等点一下就编译了,而没想过中间还需要预处理等步骤,最后还要链接可执行程序。让我有了很大的收获,尤其是刚刚学习的静态库、动态库,让我对C有了新的认识。在这之前,我对Makefile一点认识都没有,在编写Makefile时遇到了一些困难,不论是格式还是编写规则,都是十分新鲜的事物。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 124/124 1/1 9/9
  • 计划学习时间:5小时
  • 实际学习时间:9小时

原文地址:https://www.cnblogs.com/cloud795/p/9693577.html

时间: 2024-10-14 10:54:45

2018-2019-1 20165228 苏祚堃《信息安全系统设计基础》第一周学习总结的相关文章

信息安全系统设计基础第一周学习总结

第一节 Linux系统 1:Linux系统      登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项(options)或参数(arguments).       即Linux中命令格式为:command[options][arguments].但有些命令也不需要跟着选项或参数.   选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同.   参数是指命令的作用对象.  2 :man命令       1是普通的Linux命令(用户命令帮助)      

20135304刘世鹏——信息安全系统设计基础第一周学习总结

第一节 Linux系统简介 一.Linux是一个操作系统 1. Linux 本身只是操作系统的内核.内核是使其他程序能够运行的基础. 它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序 实际上都运行在内核之上. 2. Linux 内核具备了挑战 UNIX 的所有本质特性,包括 TCP/IP 网络,图 形界面系统 二.linux与windows的区别 Linux 免费或少许费用. Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体

LINUX信息安全系统设计基础第一周学习总结

 Linux系统简介 linux简介: linux与windows的区别 学习路径: 基本操作及概念 用户及权限管理 Linux目录结构及文件基本操作 环境变量与为文件查找 文件打包与压缩

20135223何伟钦—信息安全系统设计基础第九周学习总结

学习目的: 1. 掌握系统编程和系统调用的概念 2. 掌握系统编程错误处理的方式 3. 掌握Unix/Linux系统级I/O(open close read write seek stat) 4. 掌握RIO 5. 掌握I/O重定向的方法 一.Unix I/O Unix I/O定义:所有的I/O设备都被模型化为文件,所有的输入和输出都被当作 对相应文件的读和写来执行.这种将设备影射为文件的方式,称为Unix I/O (一)打开文件 (1)文件描述符:一个应用程序通过要求内核打开相应的文件,来宣告

20135219洪韶武-信息安全系统设计基础第九周学习总结

第九周学习总结 一.课本内容 1.每个unix文件都是一个m字节的序列:所有I/O设备如网络.磁盘和终端都被模型化为文件,而输入和输出就是对这些文件的读写操作. 2.unix系统中输入输出的操作: 打开文件:一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备,内核返回一个小的非负整数,叫做描述符.unix系统创建每个进程的时候都有三个打开的文件:标准输入:标准输出,标准错误. 改变当前的文件位置.对于每个打开的文件,内核保持着一个文件位置k(从文件开头起始的字节偏移量). 读

信息安全系统设计基础——第一周学习过程记录与总结体会

第一周学习过程记录与总结体会 第1节    Linux系统简介 1.Linux操作系统:即内核和系统调用两层 2.Linux与Windows的不同: (1)免费与收费 (2)软件与支持 (3)安全性 (4)使用习惯 (5)可定制性 (6)应用范畴 (7)各自缺乏的 3.如何学习Linux (1)明确态度,形成良好学习心态 (2)重视基础,从头学习 第2节  基本概念及操作 1.桌面环境介绍 通过内核—服务器(X.org) —客户端(X.client)实现完整的桌面环境,与Windows不同. 2

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

学习目标 1. 熟悉Linux系统下的开发环境    2. 熟悉vi的基本操作    3. 熟悉gcc编译器的基本原理    4. 熟练使用gcc编译器的常用选项    5 .熟练使用gdb调试技术    6. 熟悉makefile基本原理及语法规范    7. 掌握静态库和动态库的生成 内容一:vim编辑器的使用 1.vim编辑器的三种模式 Ⅰ正常模式:(按Esc或Ctrl+[进入) 左下角显示文件名或为空 Ⅱ插入模式:(按i键进入) 左下角显示--INSERT-- Ⅲ可视模式:左下角显示—V

信息安全系统设计基础第二周学习总结(一)

Linux下C语言编程基础实验报告 学习任务 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 学习内容 1. 快捷键 2. vim 3. gcc 4. gdb 5. make与makefile 学习过程记录 第一部分 第一讲第一节:移动光标 H左.j下.k上.l右 第一讲第二节:VIM的进入和退出 <E

信息安全系统设计基础第九周学习总结

(1)ls 用来显示文件的详细信息(用户名,群组名,大小,创建时间,读写执行权.) (2)who 如何查看当前登录的用户? -who am i 如何列出登录的用户? -who或-w (3)fileinfo显示文件信息 用来实现显示文件信息,建立了一个stat数据结构. 要先判断命令是否有操作数 (4)spwd列出当前目录 (5)mkdir命令用于创建一个新的目录.这个新的目录不仅可以使用绝对路径,也可以使用相对路径.但用户创建新目录的前提条件是:创建者对被创建新目录的父目录应有写权限. 如何在其

20135304刘世鹏——信息安全系统设计基础第二周学习总结

第一节.Linux基础 1.Linux命令 Linux中命令格式为:command [options] [arguments] 选项:是调整命令执行行为的开关,选项不同决定了命令的显示结果不同 参数:决定了命令的显示结果不同 例如:ls .中.为参数:ls -a中-a为选项 2.man命令 1 Executable programs or shell commands(普通的Linux命令) 2 System calls (系统调用,操作系统的提供的服务接口) 3 Library calls (