2017-2018-1 20155227 《信息安全系统设计基础》第五周学习总结

本文总结了《信息安全系统设计基础》课程第五周的学习内容,包括指令集体系结构(ISA)、汇编与反汇编命令、数据格式、MOV指令、局部变量、算术逻辑操作、控制、过程调用等内容,并分享了学习过程中的问题解决经验。

2017-2018-1 20155227 《信息安全系统设计基础》第五周学习总结

教材学习内容总结

第三章

程序编码
  • ISA

    指令集体系结构(ISA)定义了处理器状态指令的格式,以及每条指令对状态的影响。
  • 汇编命令与反汇编命令

    gcc -S xxx.c -o xxx.s 获得汇编代码,用gcc -c code.c产生目标文件code.o(二进制文件,无法直接查看),用objdump -d xxx.o反汇编可以查看目标代码文件内容。函数前两行汇编代码pushl %ebp,movl %esp,%ebp和后两行代码popl %ebp,ret所有函数都有,建立函数调用帧。

数据格式
  • 不同数据的汇编代码后缀
    1065400-20171018212018256-401398289.png
访问信息
  • 操作数的三种类型
立即数,即常数值
寄存器,表示某个寄存器的内容
存储器,根据计算出来的地址(有效地址)访问某个存储器位置。 
  • 有效地址的计算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
  • MOV

    MOV相当于C语言的赋值“=”,不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。

    MOV类中的指令将源操作数的值复制到目的操作数中,源操作数指定的值是一个立即数,存储在寄存器或存储器中,目的操作数指定一个位置,要么是一个寄存器,要么是一个存储器地址。
  • 局部变量

局部变量通常是保存在寄存器中。因为,寄存器访问比存储器访问要快得多。

算术和逻辑操作

1065400-20171018212042646-607728534.png

  • 一元和二元操作
    一元操作:只有一个操作数,既是源又是目的,可以是一个寄存器,或者存储器位置。

    二元操作:第一个操作数可以是立即数、寄存器或者存储器位置;第二个操作数既是源也是又是目的,可以是寄存器或者存储器位置,但是不能同时是存储器位置。

    操作的顺序:第二个操作数 操作符 第一个操作数

    控制
  • 条件码

    CF:进位标志
    
    ZF:零标志
    
    SF:符号标志
    
    OF:溢出标志
  • 循环(while, for)

    C语言do-while循环:

     do
    body-statement
    while(test-expr);
 汇编实现形式:
 
     loop:
    body-statement
    t = test-expr;
    if(t)
        goto loop;
过程
  • IA32
    IA32利用程序栈来支持过程调用(包括将数据和控制)。为单个过程分配的那部分栈做栈帧。最底端(地址最大)%ebp为帧指针;最顶端(地址最小)%esp为栈指针。
  • call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是在程序中紧跟在call后面的那条指令的地址。目标是指明被调用过程起始的指令地址。

  • ret指令从栈中弹出地址,并跳转到这个位置。栈指针要指向前面call指令存储返回地址的位置

异质的数据结构
  • C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。
  • 结构的所有组成部分都存放在一段连续区域内,结构的指针就是结构第一个字节的地址。
数据对齐
  • 对于大多数x86-64指令来说,保持数据对齐能够提高效率,但是它不会影响程序的行为。

教材学习中的问题和解决过程

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

  • 问题1:

    在64位机器上产生32位汇编代码时出现以下问题:

1065400-20171022141603537-155740463.png

解决方法是在终端输入如下命令:sudo apt-get install libc6-dev-i386,安装一个库。

但又出现以下问题:

     E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
     E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

1065400-20171022141536052-1890639065.png

解决方法如下:

1.终端输入 ps -aux ,列出进程。找到含有apt‘-get的进程,直接sudo kill PID。解决。

2.强制解锁,命令:
sudo rm/var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock

1065400-20171022141510349-2082238645.png

代码托管

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

1065400-20171022141444959-546679527.png

上周考试错题总结

  • 错题1

1065400-20171019103425537-2006326856.png

针对以上代码:gcc -c *.c 可以得到m.o,swap.o两个模块,哪些符号会出现在swap.o模块的.symtab条目中()

A  . buf


B  . temp


C  . swap


D  . buffp0

正确答案: A C D

理解:temp是局部变量,不出现在符号表中。

  • 错题2

dll,so文件的链接是运行在()

A  . 编译时


B  . 加载时


C  . 运行时


D  . 链接时

正确答案: C

  • ...

结对及互评

点评模板:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 其他

本周结对学习情况

-[20155318](http://www.cnblogs.com/lxy1997/)
- 结对照片
- 结对学习内容
    - 教材第三章内容
    - XXXX
    - ...

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

本周学习的内容很多,知识点有的是上学期汇编学过的,但都有所遗忘,所以学起来还是有点吃力。

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周133/1331/18/8
第三周159/2921/310/18
第五周121/4131/510/28

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:15小时

  • 实际学习时间:10小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

转载于:https://www.cnblogs.com/guyanlin/p/7709615.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值