汇编笔记滴水逆向附带课程视频
Posted AI安全小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编笔记滴水逆向附带课程视频相关的知识,希望对你有一定的参考价值。
汇编笔记【滴水逆向】附带课程视频
第一课(课程概要):
- 高级语言—(编译器)—>汇编语言—(编译器)—>机器语言
- 不是语言变得强大了,而是编译器变得强大了
- c和c++的关系:相比C语言,对于c++来讲,编译器替我们做的事情更多了;C语言是学好c++的基础
4.程序员的“Chain of contempt”(无恶意,仅供一乐)
4.学习汇编可以了解程序的本质
第二课(进制):
- 为什么要学习进制:计算机只认识二进制,也就是0和1,为了更好地学习计算机,我们首先要深入理解什么是进制
- 学习进制的障碍:总是以十进制为依托去考虑其他进制,需要运算时也总是先转换成十进制(仅仅是因为我们对十进熟悉,所以才转换);每一种进制都是完美的,想学好进制首先要忘掉十进制,也要忘掉进制之间的转换
- 进制的定义:N进制的定义:由N个符号组成,逢N进1;例如
第三课(进制运算):
- 八进制运算:
2+3=5 2*3=6 4+5=11 4*5=24 277+333=632 276*54=20250
八进制加法表:
八进制乘法表:
- 进制总结:每种进制都是完美的,它自身就是一个完整的体系,可以直接做运算
2.计算机为什么使用二进制:计算机时需要电的,电路只有两种状态:1真(通电) 0假(未通电)
3.计算机中存储的任何文件、接收的指令都是由0和1组成的,例如我们可以查看一个【*.exe应用程序】:
4.16进制是二进制的简写形式:
第四课(数据宽度):
- 1双字(DoubleWord)=2字(Word)=4字节(Byte)=32位(bit)
- 存储范围: 字节:0--0xFF 字:0--0xFFFF 双字:0--0xFFFFFFFF
如果要存储的数据超过最大宽度,那么多余的数据将被丢弃
第五、六课(无符号数和有符号数&&原码反码和补码):
- 无符号数:不存在负数,直接2进制转十进制
- 有符号数:正数和无符号数编码规则一样,负数以补码的形式在计算机中存储
- 编码规则:不同的文件有不同的编码规则:例如给你一串二进制数:你首先要问这一串二进制数存储的是什么(数值、文本、图像、音频、视频、还是应用程序?),如果是数字,再问是有符号还是无符号
- 原码:最高位为符号位,其余各位为其数值本身的绝对值
- 反码:正数:反码与原码相同;负数:符号位为1,其余位对原码取反
- 补码:正数:反码与原码相同;负数:符号位为1,其余位对原码取反加1
第七课(计算机不会做加法):
- 逻辑运算:【与(and)】1+1=1、【或(or)】1+0=1、【非(not)】~1=0、【异或(xor)】两数不同时为1,同时为0
- 左移运算[shl(<<)]:各二进制位全部左移若干位,高位丢弃,低位补零
- 右移[A:shr(>>)或B:sar(>>)]:各二进制位全部由移若干位,低位丢弃,高位A:(补零)或B:(补符号位)
第八课(通用寄存器):
- 计算机如何做加法:
第九课(汇编环境搭建):
- 学汇编不是为了写代码,而是为了理解程序的本质
- 利用工具:Olldbg或x64dbg
第十课(通用寄存器):
- 存读数据速度:CPU>内存>硬盘
- 32位通用寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI
- MOV指令:mov 立即数,寄存器 或 mov 寄存器,立即数
4.
第十一课(内存):
- 内存地址:内存太大没法起名字,所以只能用编号,这个编号又称为内存地址
- 内存地址的5种形式
PTR DS:[立即数]
PTR DS:[reg]
PTR DS:[立即数+reg]
PTR DS:[reg+reg*1,2,4,8]
PTR DS:[reg+reg*1,2,4,8+立即数]
第十二课(数据的存储模式):
1.
第十三课(常用汇编指令):
EFL:标志寄存器:其中第十位(DF)为0时,ESI和EDI运算完成后加1/2/4;第十位(DF)为1时,ESI和EDI运算完成后减1/2/4;
第十四课(堆栈):
- 什么是堆栈:就是一块内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用;和数据结构中的堆栈无关
- 堆栈使用时先从大地址开始用,当使用完,如果再继续使用时,会发生堆栈溢出
- 结合ollydbg查看堆栈
- ESP:栈指针寄存器
- 修改EIP的值:JMP,CALL;CALL与JNP区别:call在修改EIP值的同时,还把CALL指令下一行的地址存到堆栈中
- RET指令:栈顶指针加4,把原来栈顶指针中的值取出来放到EIP中
第十五课(拓展篇:反调试之Fake8):
- 单步步入(F7)和单步步过(F8)
第十六课(汇编中的函数):
- 函数就是一系列指令的集合,为了完成某个会重复使用的特定功能
- 如何执行一个函数:JMP 或 CALL
一般来讲,返回值存到EAX中
第十七课(堆栈平衡):
- 如果要返回父程序,则当我们在堆栈中进行堆栈操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址
- 如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数变化导致的堆栈变化
第十八课(ESP寻址):
1.使用寄存器传递参数
2.使用堆栈来传递参数
第十九课(EBP寻址、JCC指令):
1.
2.
声明:
- 笔记上的课程号和视频可能有所不同,但是笔记内容是依照课程视频写的
- 课程资源:【百度网盘】
链接: https://pan.baidu.com/s/11YdweHrIap_79NE4CYvLJw
提取码: e7k7
- 若需要word文档笔记,请加微信获取(备注:汇编笔记):
以上是关于汇编笔记滴水逆向附带课程视频的主要内容,如果未能解决你的问题,请参考以下文章