教材学习内容总结

  • 向后兼容:较早版本上的代码可以在较新的处理器上运行。
  • 内存看作一个字节数组。
  • 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小时

  • 改进情况:

参考资料

《深入理解计算机系统》

  • lea

转载于:https://www.cnblogs.com/GDDFZ/p/7711431.html

20155325 2017-2018-1 《信息安全系统设计基础》第五周学习总结相关推荐

  1. 20135219洪韶武——信息安全系统设计基础第五周学习总结

    信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时  一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...

  2. 20135203齐岳 信息安全系统设计基础第五周学习总结

    20135203齐岳 信息安全系统设计基础第五周学习总结 学习计时:共10小时 读书:5 代码:1 作业:2 博客:2 第四章 处理器体系结构 一.学习目标 本章内容是处理器体系结构,重点掌握ISA, ...

  3. 20135223何伟钦—信息安全系统设计基础第五周学习总结

    第三章 程序的机器级表示 一.历史观点 Intel处理器(X86) 二.程序编码 gcc -01 -o p p1.c p2.c ①编译选项-01 表示编译器使用第一级优化 ②编译选项-02 表示编译器 ...

  4. 信息安全系统设计基础第五周学习总结

    处理器的体系结构 ISA:一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA. Y86是一个指令体系结构(ISA)寄存器.存储器.条件码.PC.程序状态. halt:这个指令将会终止指 ...

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

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  6. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  7. 20135203齐岳 信息安全系统设计基础第十三周学习总结

    20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...

  8. # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结

    20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...

  9. 20145227《信息安全系统设计基础》第一周学习总结

    20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...

  10. 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...

最新文章

  1. 正确使用stl vecotr erase函数
  2. java package作用_java import、package作用与用法
  3. 百度云虚拟机 隐藏index.php,wamp server虚拟主机设置index.php隐藏(入口文件隐藏)
  4. SAP CRM Cross Component级别的跳转如果出了问题,该如何调试
  5. 读《活着》----余华
  6. Taro+react开发(78):taro生命周期render
  7. Java Web开发技术教程入门-JavaBean组件与Servlet
  8. 汇编语言比C51需要效率高,汇编语言与C51语言实现跑马灯实验的比较 -
  9. 选择条件WD_SELECT_OPTIONS_20
  10. java中报错java.sql.Timestamp cannot be cast to java.sql.Date
  11. WebRTC之视频采集
  12. 常用电阻阻值表怎么定的?
  13. 服务器的上行带宽和下行带宽是什么意思
  14. 【速成MSP430f149】电赛期间学习MSP430f149笔记
  15. async异步问题(waterfall、parallel、eachSeries、map、whilst)
  16. 什么是json数据?json数据应该怎么设计
  17. 如何批量将 bmp 格式图片转换转换为 jpg
  18. 患者到医院看病事件模拟
  19. MCU-51:单片机蜂鸣器播放音乐和提示音
  20. `英语` 2022/8/21

热门文章

  1. 银联支付java代码实现_Java后端实现三方支付集成支付宝、微信、银联、光大、邮政支付...
  2. asp 基础操作之增删改查
  3. Java WebService使用简单教程
  4. 三、Oracle学习笔记:DDL数据定义语句
  5. RocketMQ 下载、安装与 单机启动
  6. 瀚云平台kafka简单原理
  7. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第5节 线程池_2_线程池的代码实现...
  8. git error: failed to push some refs to...
  9. MVC数据验证Model Validation
  10. for循环的类型以及while循环