2019-2020-1 20175204 《信息安全系统设计基础》第三周学习总结
Posted zyzgl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019-2020-1 20175204 《信息安全系统设计基础》第三周学习总结相关的知识,希望对你有一定的参考价值。
2019-2020-1 20175204 《信息安全系统设计基础》第三周学习总结
学习目标
1.理解逆向的概念
2.掌握X86汇编基础,能够阅读(反)汇编代码
3.了解ISA(指令集体系结构)
4.理解函数调用栈帧的概念,并能用GDB进行调试
实验楼学习内容总结
要点:
1.X86 寻址方式经历三代:
DOS时代的平坦模式,不区分用户空间和内核空间,很不安全。
8060的分段模式
IA32的带保护模式的平坦模式
2..p114: MOV相当于C语言的赋值”=“,注意ATT格式中的方向,另外注意不能从内存地址直接MOV到另一个内存地址,要用寄存器中转一下。能区分MOV,MOVS,MOVZ,掌握push,pop:
没有MOVS这条指令,只有MOVSB、MOVSW、MOVSD等,串操作需要明确数据类型,B表示BYTE,W表示WORD,D表示DWORD。MOVS符号位扩展,MOVZ零扩展(高位0填充)。
3.p150/p151: call/ret:
call指令:
call指令有一个目标,即指明被调用过程起始的指令地址。
call指令的效果是将返回地址入栈。并跳转到被调用过程的起始处。
ret指令:
ret指从栈中弹出地址,并跳转到这个位置。
ret指令返回到call指令后的那条指令。
4.p123: 结合C语言理解一下控制部分控制中最核心的是跳转语句:有条件跳转p128(实现if,switch,while,for),无条件跳转jmp(实现goto)
while循环
while语句的通用形式:
while (test-expr) body-statement
GCC采用的方法,是使用条件分支,需要时省略循环体的第一次执行::
goto done;
do
body-statement
while(test-expr);
done:```
for循环
for循环的通用形式:
for(init-expr;test-expr;update-expr)
body-statement
switch语句 根据一个整数索引值进行多重分支,执行switch语句的关键步骤是通过跳转表来访问代码位置,使结构变得更加高效。 5.p174: bt/frame/up/down :关于栈帧的gdb命令 关于栈帧的gdb命令:
backtrace/bt n打印当前的函数调用栈的所有信息。 n是一个正整数,表示只打印栈顶上n层的栈信息。 -n表一个负整数,表示只打印栈底下n层的栈信息。
frame nn为栈中的层编号,是一个从0开始的整数 该指令是移动到n指定的栈帧中去,并打印选中的栈的信息。 如果没有n,则打印当前帧的信息。
up n表示向栈顶移动n层
down n```
表示向栈底移动n层
实验楼练习:
1.使用gcc -s -o main.s main.c -m32
编译为汇编代码
以上是关于2019-2020-1 20175204 《信息安全系统设计基础》第三周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
2019-2020-1 20175204 《信息安全系统设计基础》第三周学习总结
2019-2020-1 20175204 《信息安全系统设计基础》第二周学习总结