教材学习内容总结
学习梗概:
了解C语言、汇编代码、机器代码之间的关系;
了解X86-64的相关知识点(实现细节) 越界、溢出攻击等问题
GDB调试技巧
- 程序编码
- 数据格式
- 访问信息
- 算术和逻辑操作
- 控制
- 过程
- 数组的分配和访问
- 异质的数据结构
- 浮点代码
教材学习中的问题和解决过程
- 问题1:在教材中有提及“后向兼容”这个名词,按字面意思上理解,这个指的是前面的东西可以向后面兼容?不太懂是什么意思,说成“前向兼容”,即后面的东西可以兼容前面的东西,是不是更容易理解一点?
- 问题1解决方案:对“后向兼容”这个名词可以这么理解,“较早版本上编译的代码可以在较新的处理器上运行”,这样理解可以比较容易消化。
代码调试中的问题和解决过程
-
问题1:教材上说用编译选项-Og编译程序是在告诉编译器使用会生成符合原始C代码整体结构的及其代码的优化等级,而越高级别的代码得到的及其代码越难理解。那么不同优化等级得出的代码究竟有什么区别呢?
-
问题1解决方案:我编译了如下代码:
-
我分别用优化等级Og和优化等级O2进行比较,发现结果如下:
除去上图中划红圈的地方是多出来的模块以外,在main函数里的.LFB23中,编写的代码也是有不同之处的。
代码托管
上周考试错题总结
- 1.Linux中()可以列出一个可执行文件在运行时所需的共享库
- A. nm
- B. objdump
- C. strip
- D. ldd
- 选D
- 2.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
- 选BD 我的答案 AB 错误原因:没看清.o 和 .c
- 3.Linux中,目标文件XXX.o中的代码和数据节是从地址0开始的。
- A. 正确
- B. 错误
- 选A 我的答案 B 错误原因:错认为ELF头不属于节
结对及互评
本周结对学习情况
- [20155308](博客链接)
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
-
计划学习时间:5小时
-
实际学习时间:5小时