zoukankan      html  css  js  c++  java
  • 20155325 2017-2018-1 《信息安全系统设计基础》第五周学习总结

    教材学习内容总结

    • 向后兼容:较早版本上的代码可以在较新的处理器上运行。
    • 内存看作一个字节数组。
    • which查看命令所在位置
    • exec

    eg

    printf……[1]
    exec(某命令)[2]
    printf……[3]
    

    运行结果:[1]->[2] 无[3]
    原因:[2]时把代码全换成某命令的了。

    • gcc -S xxx.c -o xxx.s 获得汇编代码,也可以用objdump -d xxx 反汇编
    • 64位机器上想要得到32代码:gcc -m32 -S xxx.c
    • Ubuntu中 gcc -S code.c (不带-O1) 产生的代码更接近教材中代码(删除"."开头的语句)
    • 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。
      有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看
      od code.o | more
      od code.o > code.txt
    • gcc -S 产生的汇编中可以把 以”.“开始的语句都删除了再阅读
    • esi edi可以用来操纵数组,esp ebp用来操纵栈帧。

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

    • 问题1:ia32-libs与IA32是否存在某种联系?
    • 问题1解决方案:当x86系统上想要运行32位的程序时,往往要下载ia32-libs之类的营造一个32位运行环境去运行,就像之前我们学习汇编的时候,运行时候用DOSbox相似的道理。
    • 问题2:看到那的时候觉得x86应该就是ia32的64位版本,然而名字不是一个套路所以是否是有什么概念上我理解错误呢?
    • 问题2解决方案:x86-64就是IA32的64位拓展,最常用的名字是"x86"。见教材P112
    • 问题3:汇编课上的代码和书上的汇编代码不同。以前学的诸如
    mov ax,bx
    pop cx
    

    书上的代码

    pushq %rbx
    movq  %rdx,%rbx
    call  mult2
    movq  %rax,(%rbx)
    popq  %rbx
    ret
    
    • 问题3解决方案:指令结尾的'q'大小指示符,在大的多数情况中可以省略。GCC产生的汇编代码指令上有后缀,而反汇编代码没有。源和目的类型的五种可能组合见P123。%那些在P120

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

    • 问题1:P151习题3.23

    GCC产生的汇编代码如下:

    long dw_loop(long x)
    x initially in %rdi
    dw_loop:
    movq   %rdi,%rax
    movq   %rdi,%rcx
    imulq  %rdi,%rcx
    leaq   (%rdi,%rdi),%rdx
    .L2
    leaq   1(%rcx,%rax),%rax
    

    对于这一段的leaq的操作不理解

    • 问题1解决方案:在汇编中lea指令的功能是取偏移地址。
    • eg.LEA AX,[1000H],作用是将源操作数[1000H]的偏移地址1000H送至AX。
      而书上P121,(ra,rb)代表变址寻址,实际上是M[R[rb]+R[ri]],我的理解是"x+x"的值赋给偏移地址是%rdx代表的寄存器。所以第二个leaq就是x = x+y+1。

    lea

    代码托管

    上周考试错题总结

    • 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

    正确答案:AB
    解析:记住格式

    针对以上代码:gcc -c *.c 可以得到m.o,swap.o两个模块,相对于m.o, buf是()

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

    正确答案:A C D
    解析:temp是局部变量,不出现在符号表中。

    上图是典型的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
    解析:全局未初始化的数据放在bss节

    • gcc hello.c产生的a.out属于()
      A .
      可重定位目标文件
      B .
      可执行目标文件
      C .
      共享目标文件
      D .
      目标模块或目标文件

    正确答案: B
    解析:手抽点错

    • Linux中,目标文件XXX.o中的代码和数据节是从地址0开始的。
      A .
      正确
      B .
      错误
      正确答案: A
      解析:编译器和汇编器生成从地址0开始的代码和数据节。

    结对

    • 本周结对学习情况
      • 20155328
      • 结对照片
      • 结对学习内容
        • 第三章

    学习进度条

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 16篇 400小时
    第一周 9/9 1/1 19/19 熟练下载安装技能,锻炼解决问题能力
    第2周 380/389 2/3 26/45 1、7章
    第3,4周 1270/1659 3/6 42 2、10章
    第5周 20/1679 2/8 实验一&3章
    • 计划学习时间:22小时

    • 实际学习时间:22小时

    • 改进情况:

    参考资料

    《深入理解计算机系统》

  • 相关阅读:
    【WPF】自定义CheckBox复选框
    如何在WPF中引用Windows.System.Forms.Integration
    【转载】wpf DataGrid自动显示行号
    C#网络编程(订立协议和发送文件) Part.4
    C#网络编程(接收文件) Part.5
    状态模式
    C#网络编程(同步传输字符串) Part.2
    我的一个自己写的更新缓存的aop实例
    C#网络编程(基本概念和操作) Part.1
    mssql根据分类查询每个分类前100条数据 表名m_data,分类字段名m_type
  • 原文地址:https://www.cnblogs.com/GDDFZ/p/7711431.html
Copyright © 2011-2022 走看看