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

教材学习内容总结

书上有的内容我就不重复赘述了,只需要将部分重要的知识点归纳总结一下。

1.使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令)

  • 在栈帧之间切换

frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息。

up n 向上回退n个栈帧(更外层),n默认为1.

down n 向下前进n个栈帧(更内层),n默认为1.

  • 打印栈帧信息(不移动栈帧)

frame 打印当前栈帧的简要信息。

info frame 打印当前栈帧的详细信息。

info frame args 打印指定栈帧的详细信息。

info args 打印函数参数信息。

info locals 打印当前可访问的局部变量的信息。

  • 打印调用堆栈

backtrace 打印全部栈帧的简要信息,按Ctrl-c可终止打印。

backtrace n 打印最内层的n个栈帧的简要信息。

backtrace -n 打印最外层的n个栈帧的简要信息。

backtrace full 打印全部栈帧的详细信息。

backtrace full n 打印最内层的n个栈帧的详细信息。

backtrace full -n 打印最外层的n个栈帧的详细信息。

  • gdb相关使用指令

2.gcc -S xxx.c -o xxx.s 可以获得汇编代码

3.反汇编的两种形式:gcc -S xxx.c或者objdump -d xxx.o

4.二进制文件可以用od 命令查看,也可以用gdb的x命令查看。 有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看

od code.o | more
od code.o > code.txt

5.esi edi可以用来操纵数组,esp ebp用来操作栈帧。 对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx,32位的eax,16位的ax,8位的ah,al都是独立的

6.不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOV,MOVS,MOVZ,掌握push,pop,栈顶元素的地址是所有栈中元素地址中最低的,局部变量保存在寄存器中

7.有条件跳转的条件看状态寄存器(教材上叫条件码寄存器) ,leal不改变条件码寄存器

8.CMP不改变原数,只需要知道数据之间的关系;SUB用在需要得到两个数据进行相减后的结果; SET指令根据t=a-b的结果设置条件码

9.操作数三种类型:a.立即数;b.寄存器Ea表示寄存器a,R[Ea]表示它的值;c.存储器Mb[Addr]表示对存储在存储器中从地址Addr开始的b个字节值的引用。 有效地址Imm(Eb,Ei,s)=Imm+R[Eb]+R[Ei]*s(s为1、2、4、8)

10.数据传送指令MOV S,D(将S中的字节传送到D) MOVS(符号扩展),MOVZ(零扩展)不能直接从存储器到存储器,需寄存器中转。

11.栈是向下增长的,栈顶元素的地址是所有栈中元素地址中最低的,栈指针%esp保存着栈顶元素的地址。

学习过程

1.实验楼中的code.c源代码及汇编代码。最开始用gcc编译的时候,命令行没有显示结果,我感到很奇怪,后来才发现是因为没有输出函数。(太大意了!)经过细微修改后,运行如下:

将含有代码中以"."开头的编译器指令删除后的结果:

2.反汇编的两种形式:objdump -d xxx.o或者gcc -S xxx.c

3.使用gdb的bt/frame/up/down指令动态查看调用线帧的情况

4.书上作业3.22

  • 题目:while循环中基于汇编语言,填写 C语言空缺
  • 解决方法:先一步步将汇编语言读懂,在不熟练的情况下查之前的表格,知道testl为测试;je跳转条件为等于零或相等;shrl为右移;or为异或;jne为跳转条件不等于零,了解执行过程后,就很好去填写C语言中缺失的部分了。
  • 这个代码计算参数x的奇偶性。如果x中有奇数个1,就返回1,;如果有偶数个1,就返回0,查看汇编文件:

5.书上作业3.23

  • 题目:for循环中基于汇编语言,填写 C语言空缺
  • 解决方法:这个循环比上一个更为复杂,应该根据for循环的特性慢慢分析。
  • 这段代码把x中的位反过来,创造一个镜像。实现的方法是:将x的位从左往右移,然后再填入这些位,就像是把val从右往左移。查看汇编文件:

6.书上作业3.29

  • 题目:switch中基于汇编语言,填写 C语言空缺
  • 解决方法:关键是将来自汇编代码和跳转表的信息结合起来,理清不同情况
  • 查看汇编代码:

代码托管情况

代码托管链接

把所有的代码都增加了详细的注释:

代码统计行数:

心得体会

本周主要是对于汇编的学习,由于之前对汇编的学习不系统,理解得也不够透彻,所以本周的学习还是相对有一些吃力的,虽然3.1到3.6的内容大部分都相当于在复习,但是做题的时候,看到一些指令还是要返回到前面翻书查看指令的具体用法。本周的学习内容本来也很多,不过根据娄老师给的教材重点,有目的有重心的去看教材,已经减轻很大负担了。不过完全不看教材,一心想走捷径是绝对不行的,这门课本身就需要耗费大量时间来消化。从最开始看教材,熟悉知识点,到看代码,理解代码,到最后自己能调试代码,自己能编写代码。必须得静下心来,投入大量精力与时间,将理论与实践相结合,才能学出效果。任何一门学科都有自身的特点,将其特点与自身的学习风格相结合,打造出一套适合自己的完美学习方法,这至关重要,现在凡事都要讲科学,毫无疑问运用科学的学习方法,学习效率必定大大提高,还能有效的节约时间。何乐而不为?

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 0/0 1/2 20/20  
第二周 58/58 1/3 20/40  
第三周 150/208 1/4 22/62  
第五周 150/358 1/5 21/83  
时间: 2024-10-11 20:17:59

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

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

20145326蔡馨熠<信息安全系统设计>第2周学习总结 教材学习内容总结 一.计算机系统与链接 信息就是位+上下文,都是由一串位表示的,区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文.ASCII字符构成的文件是文本文件,所有其他文件都是二进制文件. 文件是字节序列 Hello程序的生命周期从高级C语言程序开始,每条C语句被转化为一系列“低级机器语言”指令,然后这些指令按照“可执行目标程序”的格式打包,并以二进制磁盘文件的形式存放起来,目标程序也称为“可执行目标文件”. 源文件到目

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

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

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

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

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知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

信息安全设计基础第五周学习总结

信息安全系统设计基础第五周学习总结 [学习时间:10小时] [学习内容:第三章:程序的机器表示] 一.教材内容 1.X86 寻址方式的变化: 1 DOS时代的平坦模式,不区分用户空间和内核空间,很不安全: 2 8086的分段模式: 3 IA32的带保护模式的平坦模式 2.机器编程的两种抽象: 1)指令集体系结构(Instruction set architecture,ISA)——定义指令格式以及每条指令执行之后对状态的影响.大多数ISA将程序行为描述成按顺序执行的: 2)虚拟地址 3.一些处理

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

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