汇编笔记滴水逆向附带课程视频

Posted AI安全小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编笔记滴水逆向附带课程视频相关的知识,希望对你有一定的参考价值。

汇编笔记【滴水逆向】附带课程视频

第一课(课程概要)

  1. 高级语言—(编译器)—>汇编语言—(编译器)—>机器语言
  2. 不是语言变得强大了,而是编译器变得强大了
  3. c和c++的关系:相比C语言,对于c++来讲,编译器替我们做的事情更多了;C语言是学好c++的基础

4.程序员的“Chain of contempt”(无恶意,仅供一乐)

 

4.学习汇编可以了解程序的本质

第二课(进制):

  1. 为什么要学习进制:计算机只认识二进制,也就是0和1,为了更好地学习计算机,我们首先要深入理解什么是进制
  2. 学习进制的障碍:总是以十进制为依托去考虑其他进制,需要运算时也总是先转换成十进制(仅仅是因为我们对十进熟悉,所以才转换);每一种进制都是完美的,想学好进制首先要忘掉十进制,也要忘掉进制之间的转换
  3. 进制的定义:N进制的定义:由N个符号组成,逢N进1;例如

 

第三课(进制运算):

  1. 八进制运算:

2+3=5         2*3=6         4+5=11         4*5=24         277+333=632         276*54=20250

八进制加法表:

 

八进制乘法表:

 

  1. 进制总结:每种进制都是完美的,它自身就是一个完整的体系,可以直接做运算

2.计算机为什么使用二进制:计算机时需要电的,电路只有两种状态:1真(通电) 0假(未通电)

3.计算机中存储的任何文件、接收的指令都是由0和1组成的,例如我们可以查看一个【*.exe应用程序】:

4.16进制是二进制的简写形式:

 

第四课(数据宽度):

  1.  1双字(DoubleWord)=2字(Word)=4字节(Byte)=32位(bit)  
  2. 存储范围:   字节:0--0xFF    字:0--0xFFFF 双字:0--0xFFFFFFFF

如果要存储的数据超过最大宽度,那么多余的数据将被丢弃

第五、六课(无符号数和有符号数&&原码反码和补码):

  1. 无符号数:不存在负数,直接2进制转十进制
  2. 有符号数:正数和无符号数编码规则一样,负数以补码的形式在计算机中存储
  3. 编码规则:不同的文件有不同的编码规则:例如给你一串二进制数:你首先要问这一串二进制数存储的是什么(数值、文本、图像、音频、视频、还是应用程序?),如果是数字,再问是有符号还是无符号
  4. 原码:最高位为符号位,其余各位为其数值本身的绝对值
  5. 反码:正数:反码与原码相同;负数:符号位为1,其余位对原码取反
  6. 补码:正数:反码与原码相同;负数:符号位为1,其余位对原码取反加1

第七课(计算机不会做加法):

 

  1. 逻辑运算:【与(and)】1+1=1、【或(or)】1+0=1、【非(not)】~1=0、【异或(xor)】两数不同时为1,同时为0
  2. 左移运算[shl(<<)]:各二进制位全部左移若干位,高位丢弃,低位补零
  3. 右移[A:shr(>>)或B:sar(>>)]:各二进制位全部由移若干位,低位丢弃,高位A:(补零)或B:(补符号位)

第八课(通用寄存器):

  1. 计算机如何做加法:

 

第九课(汇编环境搭建):

  1. 学汇编不是为了写代码,而是为了理解程序的本质
  2. 利用工具:Olldbg或x64dbg

第十课(通用寄存器):

  1. 存读数据速度:CPU>内存>硬盘
  2. 32位通用寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI
  3. MOV指令:mov 立即数,寄存器   或      mov 寄存器,立即数

4.

 

第十一课(内存):

 

  1. 内存地址:内存太大没法起名字,所以只能用编号,这个编号又称为内存地址
  2. 内存地址的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;

 

 

 

 

第十四课(堆栈):

  1. 什么是堆栈:就是一块内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用;和数据结构中的堆栈无关
  2. 堆栈使用时先从大地址开始用,当使用完,如果再继续使用时,会发生堆栈溢出
  3. 结合ollydbg查看堆栈
  4. ESP:栈指针寄存器
  5. 修改EIP的值:JMP,CALL;CALL与JNP区别:call在修改EIP值的同时,还把CALL指令下一行的地址存到堆栈中
  6. RET指令:栈顶指针加4,把原来栈顶指针中的值取出来放到EIP中

第十五课(拓展篇:反调试之Fake8):

  1. 单步步入(F7)和单步步过(F8)

 

第十六课(汇编中的函数):

  1. 函数就是一系列指令的集合,为了完成某个会重复使用的特定功能
  2. 如何执行一个函数:JMP  或  CALL

一般来讲,返回值存到EAX中

第十七课(堆栈平衡):

  1. 如果要返回父程序,则当我们在堆栈中进行堆栈操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址
  2. 如果通过堆栈传递参数了,那么在函数执行完毕后,要平衡参数变化导致的堆栈变化

 

 

第十八课(ESP寻址):

1.使用寄存器传递参数

2.使用堆栈来传递参数

 

 

第十九课(EBP寻址、JCC指令):

1.

 

2.

 

 

声明:

  1. 笔记上的课程号和视频可能有所不同,但是笔记内容是依照课程视频写的
  2. 课程资源:【百度网盘】

链接: https://pan.baidu.com/s/11YdweHrIap_79NE4CYvLJw

提取码: e7k7

  1. 若需要word文档笔记,请加微信获取(备注:汇编笔记):

 

以上是关于汇编笔记滴水逆向附带课程视频的主要内容,如果未能解决你的问题,请参考以下文章

C++反汇编与逆向分析-读书笔记

逆向课程第三讲逆向中的优化方式,以及加减乘

自制反汇编逆向分析工具 迭代第六版本

逆向课程第四讲逆向中的优化方式,除法原理,以及除法优化上

逆向——C语言的汇编表示之堆栈图 手把手示例 可以见后面在函数内部加一个局部变量以及嵌套调用的例子来综合理解

《逆向工程核心原理》读书笔记——第6章 汇编编写的exe程序入口