20145326蔡馨熠《信息安全系统设计》第2周学习总结

20145326蔡馨熠《信息安全系统设计》第2周学习总结

教材学习内容总结

一、计算机系统与链接

  • 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文。ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件。
  • 文件是字节序列
  • Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”。
  • 源文件到目标文件的转化由编译器驱动程序完成:gcc -o hello hello.cGCC编译器驱动程序读取源文件并把它翻译成一个可执行目标文件。翻译过程分为四个阶段:预处理、编译、汇编、链接,预处理器、编译器、汇编器、链接器一起构成编译系统。
  • 计算机系统是由硬件和系统软件组成的,程序被其他程序翻译成不同的形式,开始时是ASCII文本,然后被编译器和链接器翻译成二进制可执行文件
  • 系统的硬件组成:总线、I/O设备、内存、处理器
  • 并发:一个同时具有多个活动的系统。
  • 并行:用并发使一个系统运行地更快,并行可以在计算机系统多个抽象层次上运用。按照系统层次结构由高到低的顺序强调三个层次:线程级并发、指令级并行、单指令多数据并行
  • 处理器读取并解释存放在主存里的二进制指令
  • 操作系统内核是应用程序和硬件之间的媒介,提供三个基本的抽象:

a.文件是对I/O设备的抽象;
b.虚拟存储器是对主存和磁盘的抽象;
c.进程是对处理器、主存和I/O设备的抽象。

  • 网络提供了计算机系统之间通信的手段
  • 静态链接器主要任务:符号解析、重定位
  • 目标文件形式:可重定位目标文件、可执行目标文件、共享目标文件
  • 每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。有三种不同的符号:

a.由m定义并能被其他模块引用的全局符号
b.由其他模块定义并被模块m引用的全局符号
c.只被模块m定义和引用的本地符号

二、Vim编辑器

VIMTUTOR是个实践教程,通过实践30分钟让你对VIM编辑器入门,只要在命令行中输入vimtutor,然后跟着教程练习就可以了~

1.一般操作
Vim可以仅仅通过键盘在任意模式之中进行切换,这就使得Vim可以不用进行菜单或者鼠标操作,使文字录入员或者程序员可以大大增强速度和效率。vim有6种基本模式(常用的是普通模式、插入模式和命令行模式):

  • 普通模式(Normal mode):在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。在普通模式中,进入插入模式比较普通的方式是按a(append/追加)键或者i(insert/插入)键。
  • 插入模式(Insert mode):在插入模式中,可以按ESC键回到普通模式。
  • 可视模式(Visual mode):命令多与字母v有关,移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。
  • 选择模式(Select mode):这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
  • 命令行模式(Command line mode):在命令行模式中,执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
  • Ex模式(Ex mode):这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

2.三种常用模式的切换:

  • vim启动进入普通模式;
  • 处于插入模式或命令行模式时只需要按Esc即可进入普通模式;
  • 普通模式中按i(插入)进入插入模式;
  • 普通模式中按:进入命令行模式;
  • 命令行模式中输入wq回车后保存并退出vim。

3.进入vim:

  • 在终端中输入 vim 文件名;
  • 在终端中输入vim,进入vim界面中,进入命令行模式输入:e 文件路径(文件名)

4.游标移动(在普通模式下,按Esc进入普通模式):

按键 说明
h
i
j
k
w 移动到下一个单词
b 移动到上一个单词
  • 命令行模式下保存文档:从普通模式输入:进入命令行模式,输入w回车,保存文档。输入:w 文件名可以将文档另存为其他文件名或存到其它路径下。
  • 退出vim(常用):

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

  • 快速缩进(缩进操作均在普通模式下有效):

a.使用命令进行快速调整缩进操作:通模式下输入15G,跳转到15行;普通模式下输入>>整行将向右缩进(使用,用于格式化代码超爽);普通模式下输入<<整行向左回退;普通模式下输入:进入命令行模式下对shiftwidth值进行设置可以控制缩进和回退的字符数。
b.shiftwidth命令:shiftwidth命令是指>>命令产生的缩进(可以简写成sw) 普通模式下输入:进入命令行模式;对shiftwidth值进行设置可以控制缩进和回退的字符数。 获取目前的设定值:set shiftwidth?;设置缩进为10个字符:set shiftwidth=10

  • 调整文本位置:

a.命令行模式下输入:ce(center)命令使本行内容居中
b.命令行模式下输入:ri(right)命令使本行文本靠右
c.命令行模式下输入:le(left)命令使本行内容靠左

  • 查找:

a.普通模式下输入/向下查找,输入向上查找,n表示继续查找,N反向查找。
b.普通模式下输入\*寻找游标所在处的单词
c.普通模式下输入\#同上,但\*是向前(上)找,#则是向后(下)找
d.普通模式下输入g\*\*,但部分符合该单词即可
e.普通模式下输入g\#\#,但部分符合该单词即可

  • 使用vim编辑多个文件:

a.编辑多个文件有两种形式:一种是在进入vim前使用的参数就是多个文件;另一种就是进入vim后再编辑其他的文件。同时创建两个新文件并编辑$ vim 1.txt 2.txt 
b.默认进入1.txt文件的编辑界面:命令行模式下输入:n编辑2.txt文件,可以加!:n!强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件;命令行模式下输入:N编辑1.txt文件,可以加!即:N!强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件。

  • 进入vim后打开新文件:

a.命令行模式下输入:e 3.txt打开新文件3.txt
b.命令行模式下输入:e#回到前一个文件
c.命令行模式下输入:ls可以列出以前编辑过的文档
d.命令行模式下输入:b 2.txt(或者编号)可以直接进入文件2.txt编辑 
e.命令行模式下输入:bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
f.命令行模式下输入:e! 4.txt,新打开文件4.txt,放弃正在编辑的文件
g.命令行模式下输入:f显示正在编辑的文件名
h.命令行模式下输入:f new.txt,改变正在编辑的文件名字为new.txt

  • 恢复文件:vim -r进入文档后,输入:ewcover 1.txt来恢复。
  • 创建加密文档:$ vim -x file1

三、GCC的使用

1.gcc 编译程序的流程:

  • 预处理:gcc –E cxy.c –o cxy.i;gcc –E调用cpp,产生预处理过的C原始程序
  • 编译:gcc –S cxy.i –o cxy.s;gcc –S调用ccl,产生汇编语言原始程序
  • 汇编:gcc –c cxy.s –o cxy.o;gcc -c调用as,产生目标文件
  • 链接:gcc cxy.o –o cxy;gcc -o调用ld,产生可执行文件
  • 运行:./cxy

2.库选项:-static(进行静态编译,即链接静态库、禁止使用动态库)、-shared(生成动态库文件、进行动态编译,在没有动态库时才会链接同名静态库)、-L dir(在库文件的搜索路径列表中添加dir目录)、-lname-fPIC(生成使用相对地址的位置无关的目标代码,然后使用gcc的-static选项从该PIC目标文件生成动态库文件)

3.静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。

  • 静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
  • 静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx //链接到静态库;

4.共享库的生成:gcc -fPIC -c xxx.cgcc -shared -olibxxx.so xxx.o;共享库的使用:gcc -o main main.c -L. -lxxx

5.注册共享库的方法:

  • 修改/etc/ld.so.conf文件
  • 修改LDLIBRARYPATH环境变量
  • 将库文件直接复制到/lib或者/usr/lib目录下:cp (lib+name).so /lib

四、GDB的使用

  • 程序的运行状态有“运行”、“暂停”、“停止“三种。
  • 主要操作:
  • 查看文件:l
  • 设置断点:在b后加入相对应的行号。例b 6
  • 查看断点情况:设置完断点后键入info b,在gdb中可以设置多个断点。bt查询调用函数的情况
  • 运行代码:默认从首行开始运行代码,键入rr+行号:从该行号开始运行
  • 查看变量值:p变量。例:p n
  • 单步运行:nss会进入函数,n不会进入函数
  • 恢复程序运行:c
  • 帮助信息:h
  • 断点的设置:
  • 函数:b 文件名.c:函数名
  • 行:b 行数
  • 条件:b 行数 if 表达式(例如:b 9 if == 12)
  • 临时:tb [文件名:]行号或函数名 <条件表达式>

五、MakeFile的使用

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

a.目标文件:由make创建,通常是目标文件或可执行文件
b.依赖文件:创建目标体所依赖的文件
c.运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
d.格式为:目标文件:依赖文件列表[tab键]各目标体运行命令(注意不是空格)
e.使用make的格式:make 目标文件

  • makefile变量的定义:

a.递归展开方式:在引用该变量时进行替换(不能用于引用自己的情况),缺点:不能在变量后追加内容
b.格式定义:VAR = var
c.展开方式:在定义处展开,并只展开一次。优点:消除变量的嵌套引用
d.格式定义:VAR := var
e.make中变量的使用格式: $(变量名)
f.变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感

学习过程中的问题

1.进行GDB调试时,出现错误!

原因及解决:原因是生成的二进制可执行文件没有使用-g选项。
gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件!

代码托管情况

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 0/0 1/2 20/30  
第二周 200/200 1/3 20/40  
时间: 2024-08-05 20:03:17

20145326蔡馨熠《信息安全系统设计》第2周学习总结的相关文章

20145326蔡馨熠《网络对抗》——恶意代码分析

20145326蔡馨熠<网络对抗>--恶意代码分析 1.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所以想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控.. 需要监控什么? 系统中各种程序.文件的行为. 还需要注意是否会出现权限更改的行为. 注册表. 是否有可疑进程. 如果有网络连接的情况,需要注意这个过程中的IP地址与端口. 用什么来监控? 最先想到的肯定是使用wireshark抓包了,再进行进一步分析. Sysinternals

20145221高其&amp;20145326蔡馨熠《信息安全系统设计基础》实验二 固件设计

20145221高其&20145326蔡馨熠<信息安全系统设计基础>实验二 固件设计 实验目的与要求 了解多线程程序设计的基本原理,学习 pthread 库函数的使用. 了解在 linux 环境下串行程序设计的基本方法. 掌握终端的主要属性及设置方法,熟悉终端I /O 函数的使用.学习使用多线程来完成串口的收发处理. 熟悉linux开发环境,学会基于S3C2410的linux开发环境的配置和使用.使用linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的

20145326蔡馨熠 实验三 &quot;敏捷开发与XP实践&quot;

20145326蔡馨熠 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 一.git上传代码 首先我通过git上传一个名为“shiyansan”的代码. 设置权限: 然后我的partner从网上把这个文档下载到他的电脑中. 然后再修改,再上传: 我的partner:-  [20145211黄志远开源托管代码](https://git.oschina.net/nostalgia_) 二.敏捷开发与XP 软件工程是把

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20145326蔡馨熠《信息安全系统设计基础》第11周学习总结

20145326蔡馨熠<信息安全系统设计基础>第11周学习总结 教材内容总结 异常控制流(ECF)发生在计算机系统的各个层次,是计算机系统中提供并发的基本机制.在硬件层,异常是由处理器中的事件触发的控制流中的突变.控制流传递给一个软件处理程序,该处理程序进行一些处理,然后返回控制给被中断的控制流. 有四种不同类型的异常:中断.故障.终止和陷阱.当一个外部旧设备,例如定时器芯片或者一个磁盘控制器,设置了处理器芯片上的中断引脚时(对于任意指令)中断会异步地发生控制返回到故障指令后面的那条指令. 一

20145326蔡馨熠《信息安全系统设计基础》第12周学习总结

20145326蔡馨熠<信息安全系统设计基础>第12周学习总结 教材学习内容总结 第九周学习内容总结 第十周学习内容总结 第十一周学习内容总结 视频学习与实践 指针与声明 C语言中变量的声明包括两个部分: 类型 声明符 对于简单类型,声明并不会对代码产生多大的阅读障碍,而对于复杂类型的识别,可以采用右左右左法进行判断. 指针数组.数组指针.指针函数.函数指针的区别 数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的

20145326蔡馨熠《信息安全系统设计》第五周学习总结

教材学习内容总结 书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 1.使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令) 在栈帧之间切换 frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息. up n 向上回退n个栈帧(更外层),n默认为1. down n 向下前进n个栈帧(更内层),n默认为1. 打印栈帧信息(不移动栈帧) frame 打印当前栈帧的简要信息. i

20145326蔡馨熠《信息安全系统设计》第7周学习总结

教材学习内容总结 在简单模型中,存储器系统是一个线性的字节数组,而cpu能够在一个常数时间内访问每个存储器位置.实际上,存储器系统是一个具有不同容量.成本和访问时间的存储设备的层次结构.书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下. 存储技术 静态RAM(SRAM):用来作为高速缓存存储器,每个位存储在一个双稳态的存储器单元里.双稳态就是说电路可以无限期的保持在两个不同的电压配置或者状态之一.只要供电,就会保持不变.即使有干扰,例如电子噪音来扰乱电压,当干扰消除后,电路就会

Buffer lab——20145326蔡馨熠

Buffer lab 缓冲区溢出攻击的原理 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写.从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于