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

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

教材学习内容总结

一、机器级代码

  • 对于机器级编程来说,两种抽象尤为重要。
  1. 指令集体系结构ISA
  2. 存储器系统
  • ISA:机器级程序的格式和行为,定义为指令集体系机构,它定义了处理器状态指令的格式,以及每条指令对状态的影响。机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字符数组

  • PC:程序计数器。在IA32中,用%eip表示,指示将要执行的下一条指令在存储器中的地址。

  • 程序存储器:包含程序的可执行机器代码,操作系统需要的一些信息,用来管理过程调用和返回的运行时栈,以及用户分配的存储器块。

  • 反汇编器查看目标代码文件的内容。

objdump -d xxx.xx
  • 二进制文件可以用od 命令查看,也可以用gdb的x命令查看。 有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看。
od code.o | more
od code.o > code.txt
  • 小端法的读法是与自然方向是相反的,P109页18 a0 04 08的正确顺序其实是18 a0 04 08,去掉最高位的0后即为0x804a018

C语言数据类型在IA32中的大小

  • 一些通常对C语言程序员隐藏的机器代码在IA32中是可见的:
    程序计数器(在IA32中,通常称为“PC”,用%eip表示)指示将要执行的下一条指令在存储器中的地址。
  • 整数寄存器:包含8个命名的位置,分别存储32位的数值,这些寄存器可以存储地址(对应C语言的指针)或整数数据,有的寄存器被用来记录某些重要的程序状态,其他的寄存器用来保存临时数据,例如过程的局部变量和函数的返回值。
  • 条码寄存器:保存着最近执行的算术或逻辑指令的状态信息,他们用来实现控制或数据流中的条件变化。
    浮点寄存器:一组浮点寄存器存放浮点数据
    栈帧结构:机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。最顶端的栈帧以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为栈指针。
  • 汇编代码:
    pushl %ebp 将寄存器%ebp的内容压入程序栈 movl %esp,%ebp 得到新栈低,将当前栈顶赋予栈低 popl %ebp过程调用结束,恢复旧栈低 ret 子程序的返回指令

操作系统:

  • 文件:1.硬件cpu
    2.内存I/O --→字节数组

  • 虚拟内存:0-2^32-1 (逻辑地址(大) 物理地址(小)

  • 进程

  • mount把目录中文件夹映射到arm中利于调试
    静态库
    ar --→利用交叉编译器的ar

  • linux命令三要素:名字 参数 选项

  • execve(2)执行程序

  • which ls 查看ls安装目录

  • 使用GDB的堆栈跟踪功能(GDB中有很多针对调用堆栈的命令,都需要一个目标栈帧,例如打印局部变量值的命令)

1.在栈帧之间切换

frame args 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息。

up n 向上回退n个栈帧(更外层),n默认为1.
down n 向下前进n个栈帧(更内层),n默认为1.

2.打印栈帧信息(不移动栈帧)
  • frame 打印当前栈帧的简要信息。
  • info frame 打印当前栈帧的详细信息。
  • info frame args 打印指定栈帧的详细信息。
  • info args 打印函数参数信息。
  • info locals 打印当前可访问的局部变量的信息。
3.打印调用堆栈
  • backtrace 打印全部栈帧的简要信息,按Ctrl-c可终止打印。
  • backtrace n 打印最内层的n个栈帧的简要信息。
  • backtrace -n 打印最外层的n个栈帧的简要信息。
  • backtrace full 打印全部栈帧的详细信息。
  • backtrace full n 打印最内层的n个栈帧的详细信息。
  • backtrace full -n 打印最外层的n个栈帧的详细信息。

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

  • 练习中关于改变push $0xff的指令后缀,请教同学后明白对于栈操作都是双字操作,所以不管是pop还是push都应该使用pushl和popl

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

代码托管

https://gitee.com/gaoziyun11/Linux/tree/master/第五周

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 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
原文地址:https://www.cnblogs.com/gaoziyun11/p/7711268.html