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\n", 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小时

  • 改进情况:

参考资料

《深入理解计算机系统》

posted @ 2017-10-22 20:16  难能可贵成功犯傻  阅读(284)  评论(0编辑  收藏  举报