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

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


教材学习内容总结

gcc -Og -o p p1.c p2.c:-Og告诉编译器使用会生成符合原始C代码整体结构的机器代码的优化等级。
gcc -Og -S xxx.c:可看到编译器产生的汇编代码。
objdump -d xxx.o:可查看机器代码文件的内容。
C语言调用机制使用了栈数据结构提供的后进先出的内存管理原则。
call指令有一个目标,即指明被调用过程起始的指令地址。
有些情况下局部数据必须存放在内存中。
寄存器不够存放所有本底数据。
对一个局部变量使用地址运算符“&”。
某些局部变量是数组活结构。
寄存器组是唯一被所有过程共享的资源。必须确保一个过程调用另一过程时,寄存器值不会被覆盖。
处理器:
  • 程序处理器:只是下条将要执行的指令在存储器中的地址
  • 整数寄存器:包含16个命名的位置,分别存储64位值。可用来记录某些文件状态,也可用来保存临时值。
  • 条纹寄存器:保存最近执行的算数或逻辑指令的状态信息。
  • 浮点寄存器:一组向量寄存器可以存放一个或多个证书或浮点数值。

处理器的通用目的寄存器
X86-64的中央处理单元(cpu)包含一组16个存储64位值的通用目的寄存器.

GDB调试
  • 反汇编:objdump -d mstore.o
  • 可在函数入口设置断点,查看各个寄存器和存储器,还可单步跟踪程序,一次执行几条命令
汇编指令
mov类指令:源操作数的值复制到目的操作数中。
movb 传送字节
movw 传送字
movvl 传送双字
movz 零扩展
一元操作
INC 加一
DEC 减一
NEG 取负
NOT 取补
二元操作
ADD 加
SUB 减
IMUL 乘
XOR 异或
OR 或
AND 与
CF:进位标志
ZF:零标志
SF:符号标志
OF:溢出标志
寻址方式

立即数寻址:操作数在指令中直接给出,只能用于源操作数,数据长度应与目的操作数长度匹配。
寄存器寻址:数放在CPU的内部寄存器中,源操作数与目的操作数长度应一致。
存储器寻址:操作数存放在存储器中,指令中给出操作数的偏移地址信息。

本周错题总结

有关gdb调试汇编,下面说法正确的是()

A .可以用disas反汇编当前函数

B .以16进制形式打印%rax中内容的命令是 print /x $rax

C .可以用info registers查看所有寄存器的值

D .可以用info frame 查看所有栈帧的信息

E .可以使用up,down切换栈帧

正确答案: A B C E  你的答案: A E 

- /x是16进制的打印,info registers可查看所有寄存器的值。
下面的跳转指令与ZF有关的是()

A .jmp

B .je

C .js

D .ja

E .jb

F .jbe

正确答案: B D F  你的答案: A B D

- jbe为小于等于跳转,zf可判断跳转结果是否为0
假设用ADD指令完成C表达式t=a+b的功能,有关条件码寄存器的说法正确的是()

A .若t==0  ,则ZF=1

B .若t<0, 则CF=1

C .若t<0, 则SF=1

D .若(a<0==b<0)&&(t<0 != a<0), 则OF=1

E .若(a<0==b<0)&&(t<0 != a<0), 则CF=1

F .leaq指令不影响条件码寄存器

G .cmp指令不影响条件码寄存器

正确答案: A C D F  你的答案: A D F

- 计算结果为负时,sf为1
x86-64 Linux中,函数调用的返回值存在()寄存器中。

A .%rax

B .%rbx

C .%rcx

D .%rsp

E .%rbp

正确答案: A  你的答案: D

- rsp是指向栈顶的寄存器,rax才是寄存器

结对学习

  • 本周依然和5221同学一起复习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 3500行 12 14小时
第一周 63/150 1/12 3小时
第二周 150/150 2/12 10小时
第三周 150/150 3/12 13小时
原文地址:https://www.cnblogs.com/nmsl123/p/9787136.html