首页
登录 | 注册

20145312 《信息安全系统设计基础》第2周学习总结

20145312 《信息安全系统设计基础》第2周学习总结

教材学习内容总结

Vim基本操作

移动光标 :

按Esc进入普通模式,在该模式下使用方向键或者h,j,k,l键可以移动游标。
20145312 《信息安全系统设计基础》第2周学习总结

进入插入模式 :

在普通模式下使用下面的键将进入插入模式,并可以从相应的位置开始输入。
20145312 《信息安全系统设计基础》第2周学习总结

保存文档 :命令行模式下保存文档从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下。

退出vim:

命令行模式下退出vim:从普通模式输入:进入命令行模式,输入wq回车,保存并退出编辑。
普通模式下退出vim:普通模式下输入Shift+zz即可保存退出vim

删除文本:

20145312 《信息安全系统设计基础》第2周学习总结

GCC

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

1.预处理阶段:一般格式为:gcc [选项] 要编译的文件 [选项] 目标文件 gcc -E hello.c -o hello.i
2.编译阶段:gcc将代码翻译成汇编语言,使用选项-S只进行编译而不进行汇编,结果生成汇编代码。gcc -S hello.i -o hello.s
3.汇编阶段:将.s文件转成目标文件,使用选项-c可以看到汇编代码转换为二进制目标代码。gcc -c hello.s -o hello.o
4.链接阶段:默认搜索链接到libc.so.6函数库当中,调用库文件中已经实现的函数。

20145312 《信息安全系统设计基础》第2周学习总结

GDB

GDB最基本的命令有:

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

GDB的使用

gdb主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数即可。如:

$ gcc -g hello.c -o hello
$ g++ -g hello.cpp -o hello

启动GDB的方法有以下几种:

gdb <program> program也就是执行文件,一般在当前目录下。
gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后,core dump后产生的文件。
gdb <program> <PID> 如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试它。program应该在PATH环境变量中搜索得到。

Makefile使用

Makefile的一般写法

test(目标文件): prog.o code.o(依赖文件列表) 
tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)

使用带宏的 Makefile

Makefile还可以定义和使用宏(也称做变量),从而使其更加自动化,更加灵活,在Makefile中定义宏的格式为:macroname = macrotext 使用宏的格式为:$(macroname)

生成静态库math.h,共享库math.so

生成静态库:

  1. 生成目标文件gcc -c add.c sub.c mul.c div.c
  2. 生成静态库:ar rcs math.a add.o sub.o mul.o div.o

    生成共享库

  3. 生成目标文件:gcc -fpic -c add.c sub.c mul.c div.c
  4. 生成共享库:gcc -shared -o math.so add.o sub.o mul.o div.o

学习中的问题和解决过程

问题:

如何区分GDB的n(next)命令和s(step)命令,实际使用中应该优先选用哪个?

解答:

GDB的n(next)命令让GDB执行下一行,然后暂停。 s(step)命令的作用与此类似,只是在函数调用时step命令会进入函数。而next导致程序执行的暂停出现在下次调用函数时。DDD有对应的Next和Step菜单项。简单来说next:执行一行源代码但不进入函数内部。step :执行一行源代码而且进入函数内部。我认为应该优选step,通过GDB的next命令一次是移动一行代码,而通过step命令单步调试一段时间,更能够仔细检查靠近断点处的程序状态和行为。

本周代码托管截图

20145312 《信息安全系统设计基础》第2周学习总结

学习进度条

20145312 《信息安全系统设计基础》第2周学习总结

参考资料

  • 《深入理解计算机系统V2》学习指导
  • ...

相关文章

  • 补习系列(20)-大话 WebSocket 与 &quot;尬聊&quot;的实现
    目录 一.聊聊 WebSocket 二.Stomp 是个什么鬼 三.SpringBoot 整合 WebSocket A. 引入依赖 B. WebSocket 配置 C. 控制器 D. 前端实现 四.参考文档 一.聊聊 WebSocket 从 ...
  • LSTM实现中文文本情感分析
    1. 背景介绍 文本情感分析是在文本分析领域的典型任务,实用价值很高.本模型是第一个上手实现的深度学习模型,目的是对深度学习做一个初步的了解,并入门深度学习在文本分析领域的应用.在进行模型的上手实现之前,已学习了吴恩达的机器学习和深度学习的 ...
  • ERP不规范,同事两行泪
    最近的很多次对外交流,都聊到了ERP建设的话题,并且无一例外的不那么让人省心,回想我这么多年走过的ERP坑坑路,在这里也写下经验和总结,希望能给正在或者即将走上ERP建设路的企业一些思考和帮助. 导读 1.几个瞎眼而普遍的案例 2.ERP的 ...
  • Windbg分析高内存占用问题
    1. 问题简介 最近产品发布大版本补丁更新,一商超客户升级后,反馈系统经常奔溃,导致超市的收银系统无法正常收银,现场排队付款的顾客更是抱怨声声.为了缓解现场的情况, 客户都是手动回收IIS应用程序池才能解决. 这样的后果是很严重的,接到反馈 ...
  • 汝之蜜糖,吾之砒霜——聊聊软件开发中的最佳实践
        "描述一个事物,唯有一个名词定义它的概念,唯有一个动词揭露它的行为,唯有一个形容词表现它的特征.要做的,就是用心去寻找那个名词.那个动词.那个形容词--" -- 福楼拜 (Gustave Flaubert)   ...
  • Linux的内存分页管理
    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载   内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在其中保存数据.我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存和内存 ...

2020 cecdns.com webmaster#cecdns.com
12 q. 0.080 s.
京ICP备10005923号