• # 2017-2018-1 20155224 《信息安全系统设计基础》第5周学习总结


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

    教材学习内容总结

    • gcc -Og -o p p1.c p2.c:-Og告诉编译器使用会生成符合原始C代码整体结构的机器代码的优化等级。
    • gcc -Og -S xxx.c:可看到编译器产生的汇编代码。
    • objdump -d xxx.o:可查看机器代码文件的内容。
    • C语言调用机制使用了栈数据结构提供的后进先出的内存管理原则。
    • call指令有一个目标,即指明被调用过程起始的指令地址。
    • 有些情况下局部数据必须存放在内存中。
      • 寄存器不够存放所有本底数据。
      • 对一个局部变量使用地址运算符“&”。
      • 某些局部变量是数组活结构。
    • 寄存器组是唯一被所有过程共享的资源。必须确保一个过程调用另一过程时,寄存器值不会被覆盖。

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

    (一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )

    • 问题1:本章主要内容是汇编相关的,但我对汇编相关指令还不是很熟悉。
    • 问题1解决方案:
      -----------------------算数运算指令-----------------------
      ADD 加法
      ADC 带位加法
      SBB 带位减法
      SUB 减法.
      INC 加法.
      NEC 求反(以0减之).
      NEG 求反然后加1,假如NEG AL相当于Not AL; INC AL
      CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).
      INC DPTR 数据指针寄存器值加1 (说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字
      节(DPH)加1,不影响任何标志位)

    MUL A B 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器(说明:将累加
    器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器.如果积大于FFH,则溢出
    标志位(OV)被设定为1,而进位标志位为0)

    IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
    DIV A B 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器(说明:无符号的除法运算,
    将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0)

    IDIV 整数除法. 以上两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算).

    -----------------------逻辑运算指令---------------------------------
    AND 与运算.
    OR 或运算.
    XOR 异或运算.
    NOT 取反.
    TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).
    SHL 逻辑左移.
    SHR 逻辑右移.
    SAL 算术左移.(=SHL)
    SAR 算术右移. (左移是一样的,右移是不同的.逻辑右移补0,算术右移补最高位)
    ROL 循环左移. ( ((unsigned char)a) << 5 ) | ( ((unsigned char)a) >> 3 )
    rol eax,cl ==> eax=(eax<<cl)+(eax>>(32-cl));
    ROR 循环右移. ror eax,cl ==> eax=(eax>>cl)+(eax<<(32-cl));
    RCL 通过进位的循环左移.
    RCR 通过进位的循环右移.
    以上八种移位指令,其移位次数可达255次.
    移位一次时, 可直接用操作码. 如 SHL AX,1.
    移位>1次时, 则由寄存器CL给出移位次数.
    如 MOV CL,04
    SHL AX,CL

    -----------------------数据转移指令---------------------------------

    1. 通用数据传送指令.
      MOV 传送字或字节.
      MOVSX 先符号扩展,再传送.
      MOVZX 先零扩展,再传送.
      PUSH 把字压入堆栈.
      POP 把字弹出堆栈.
      PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
      POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
      PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
      POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
      BSWAP 交换32位寄存器里字节的顺序
      XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
      CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
      XADD 先交换再累加.( 结果在第一个操作数里 )
      XLAT 字节查表转换.
      ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即 0-FFH); 返回 AL

      为查表结果. ( [BX+AL]->AL ) 
      
    2. 输入输出端口传送指令.
      IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )
      OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )
      输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,
      其范围是 0-65535.

    ----------------------- 标志传送指令-----------------------

    LAHF 标志寄存器传送,把标志装入AH.
    SAHF 标志寄存器传送,把AH内容装入标志寄存器.
    PUSHF 标志入栈.
    POPF 标志出栈.
    PUSHD 32位标志入栈.
    POPD 32位标志出栈.
    0012F618 |00A8E5A8 ASCII "nk'MHBh30"

    -----------------------程序转移指令 -----------------------

    1>无条件转移指令 (长转移)
    JMP 无条件转移指令
    CALL 过程调用
    RET/RETF过程返回.
    2>条件转移指令 (短转移,-128到+127的距离内)
    ( 当且仅当(SF XOR OF)=1时,OP1<OP2 )
    JA/JNBE 不小于或不等于时转移.
    JAE/JNB 大于或等于转移.
    JB/JNAE 小于转移.
    JBE/JNA 小于或等于转移.
    以上四条,测试无符号整数运算的结果(标志C和Z).
    JG/JNLE 大于转移.
    JGE/JNL 大于或等于转移.
    JL/JNGE 小于转移.
    JLE/JNG 小于或等于转移.
    以上四条,测试带符号整数运算的结果(标志S,O和Z).
    JE/JZ 等于转移.
    JNE/JNZ 不等于时转移.
    JC 有进位时转移.
    JNC 无进位时转移.
    JNO 不溢出时转移.
    JNP/JPO 奇偶性为奇数时转移.
    JNS 符号位为 "0" 时转移.
    JO 溢出转移.
    JP/JPE 奇偶性为偶数时转移.
    JS 符号位为 "1" 时转移.
    3>循环控制指令(短转移)
    LOOP CX不为零时循环.
    LOOPE/LOOPZ CX不为零且标志Z=1时循环.
    LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
    JCXZ CX为零时转移.
    JECXZ ECX为零时转移.
    4>中断指令
    INT 中断指令
    INTO 溢出中断
    IRET 中断返回
    5>处理器控制指令
    HLT 处理器暂停, 直到出现中断或复位信号才继续.
    WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
    ESC 转换到外处理器.
    LOCK 封锁总线.
    NOP 空操作.
    STC 置进位标志位.
    CLC 清进位标志位.
    CMC 进位标志取反.
    STD 置方向标志位.
    CLD 清方向标志位.
    STI 置中断允许位.
    CLI 清中断允许位.

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

    • 问题1:XXXXXX
    • 问题1解决方案:XXXXXX
    • 问题2:XXXXXX
    • 问题2解决方案:XXXXXX
    • ...

    代码托管

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

    上周考试错题总结

    • main.c 调用了静态库libmath.a中的函数,编译main.c的命令是()
      A .
      gcc -static main.c ./libmath.a -o main
      B .
      gcc -static main.c -L. -lmath -o main
      C .
      gcc -static main.c -L. -llibmath.a -o main
      D .
      gcc -static main.o ./libmath.a -o main

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

    • 针对以上代码:gcc -c *.c 可以得到m.o,swap.o两个模块,相对于m.o, buf是()
      A .
      外部符号
      B .
      全局符号
      C .
      局部符号
      D .
      以上都不对

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

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

    A .
    buf
    B .
    temp
    C .
    swap
    D .
    buffp0

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

    • 上图是典型的ELF的可重定位目标文件的格式,对于代码:
      int a[100] ={0};
      int b[100];

    int main()
    {
    int i=0;
    for(i=0; i<100; i++)
    b[i] = i;
    printf("the b[3]= %d ", b[3]);
    return 1;

    }
    其中b[100]存放在()节
    A .
    .text
    B .
    .data
    C .
    .bss
    D .
    .rodata

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

    • 编译驱动程序gcc -c 会调用()
      A .
      预处理器
      B .
      编译器
      C .
      汇编器
      D .
      链接器

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

    • dll,so文件的链接是运行在()
      A .
      编译时
      B .
      加载时
      C .
      运行时
      D .
      链接时

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

    结对及互评

    点评模板:

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

    本周结对学习情况

    - [20155219](http://www.cnblogs.com/paypay/)
    - 结对照片
    

    - 结对学习内容
        - XXXX
        - XXXX
        - ...
    

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

    xxx
    xxx

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 3/3
    第二周 32/32 1/2 4/7
    第三周 109/141 1/3 8/15
    第四周 58/199 1/4 8/15

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

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

    • 计划学习时间:XX小时

    • 实际学习时间:XX小时

    • 改进情况:

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

    参考资料

  • 相关阅读:
    Fluent 18.0新功能之:其他
    【小白的CFD之旅】小结及预告
    【小白的CFD之旅】19 来自计算网格的困惑
    【小白的CFD之旅】18 控制方程基础
    【小白的CFD之旅】23 串行与并行
    【小白的CFD之旅】22 好网格与坏网格
    JS ES6的变量的结构赋值
    JS中some()和every()和join()和concat()和pop(),push(),shift(),unshfit()和map()和filter()
    JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性)
    javascript中this的指向问题
  • 原文地址:https://www.cnblogs.com/nxy970408/p/7711050.html
Copyright © 2020-2023  润新知