滴水逆向三期笔记和作业-汇编总结2

第五课 标志寄存器

EFL拆开就是上面的各个标志位

例:202(001000000010)对照下图

1.运算结构标志位

  • CF位(进位标志):表示最高位有没有进位,借位不算
  • PF位(辅助标志):表示运算结果中最低有效字节“1”的个数是否是偶数,偶数则为1,奇数反之

(最低有效字节也就是0000 0010 0000 0011 最后两个字节,8、16、32位都看最后两个字节)

  • AF位(辅助进位标志):表示低4位的相加是否有进位,有进位则为1,比如32位0555FFFF就是看第四位(加粗)有没有进位,16位时05FF就看第二位有没有进位,8位时5F就看第一位有没有进位

  • ZF位(零标志):表示运算结果是否为0,是则为1(判断运算结果是否为1)

注: mov eax,0不影响标志寄存器,因为mov是赋值操作不是运算

  • SF位(符号标志):反映运算结果的符号位,与运算结果的最高位相同,因为如果是运算结果的最高位即表示正负(7F:01111111)+2=(81:10000001)

al 7F+2或者ax 7fff+2SF才能进1

  • OF位(溢出标志):表示有符号数加减运算所得结果是否溢出(先大概可以理解成有符号计算看OF,无符号计算看CF)

2.状态控制标志位

  • DF(方向标志位):在串处理指令中,每次操作后,如果DF=0,则esi、edi递增,如果DF=1,则esi、edi递减。(可以用在movsw命令中,当DF=1时,edi和esi-4)

3.命令

ADC与SBB

ADC:目前理解是不仅计算了1+2,还加上了进位标志的1

标志位都清空,留下CF为1,等一下可以演示出CF的1被加上的效果

1+2本应为3,但是此时计算结果是4,说明CF进位的1被加上了

SBB:与加法相同,4-2-1

XCHG命令

XCHG:交换寄存器数据(不可交换立即数)

movs命令

简写:

注意:

1、只能使用EDI和ESI两个寄存器(寄存器里面需要是地址)

2、只是mov拷贝操作

3、ESI和EDI都进行了加4的操作,方便下一个值的赋值,这里加4还是加2取决于movd还是movw,加还是减取决于DF标志位

4、堆栈地址不变

STOS命令

注:

1、和MOVS命令一样执行后EDI地址会加或减

2、加或减一样受DF标志控制

3、注意数据宽度

4、得用简写,不知道为什么具体写会语法错误

REP命令

注意

1、用完后ecx会清空

2、不能用cx去定义,最后循环几次是看整个ecx寄存器

作业:

第六课 JCC命令

JMP:修改EIP

CALL:push 下一条语句地址(栈顶+4)+修改eip

CMP:相减后不保留相减结果保留零标志位结果(用于判断两数是否相等,相等时相减即是0,零标志位为1

TEST:两个数值进行与操作,结果不保存,改变标志位(用于确定某个寄存器是否等于0

JCC指令:

JCC指令

中文含义

英文原意

检查符号位

典型C应用

JZ/JE

若为0则跳转;若相等则跳转

jump if zero;jump if equal

ZF=1

if (i == j);if (i == 0);

JNZ/JNE

若不为0则跳转;若不相等则跳转

jump if not zero;jump if not equal

ZF=0

if (i != j);if (i != 0);

JS

若为负则跳转

jump if sign

SF=1

if (i < 0);

JNS

若为正则跳转

jump if not sign

SF=0

if (i > 0);

JP/JPE

若1出现次数为偶数则跳转

jump if Parity (Even)

PF=1

(null)

JNP/JPO

若1出现次数为奇数则跳转

jump if not parity (odd)

PF=0

(null)

JO

若溢出则跳转

jump if overflow

OF=1

(null)

JNO

若无溢出则跳转

jump if not overflow

OF=0

(null)

JC/JB/JNAE

若进位则跳转;若低于则跳转;若不高于等于则跳转

jump if carry;jump if below;jump if not above equal

CF=1

if (i < j);

JNC/JNB/JAE

若无进位则跳转;若不低于则跳转;若高于等于则跳转;

jump if not carry;jump if not below;jump if above equal

CF=0

if (i >= j);

JBE/JNA

若低于等于则跳转;若不高于则跳转

jump if below equal;jump if not above

ZF=1或CF=1

if (i <= j);

JNBE/JA

若不低于等于则跳转;若高于则跳转

jump if not below equal;jump if above

ZF=0或CF=0

if (i > j);

JL/JNGE

若小于则跳转;若不大于等于则跳转

jump if less;jump if not greater equal

SF != OF

if (si < sj);

JNL/JGE

若不小于则跳转;若大于等于则跳转;

jump if not less;jump if greater equal

SF = OF

if (si >= sj);

JLE/JNG

若小于等于则跳转;若不大于则跳转

jump if less equal;jump if not greater

SF != OF 或 ZF=1

if (si <= sj);

JNLE/JG

若不小于等于则跳转;若大于则跳转

jump if not less equal;jump if greater

SF=0F 且 ZF=0

if(si>sj)

注:低于高于表示无符号数,小于大于表示有符号数

作业

1、call把返回地址压入栈,再把eip指向函数地址(eip变成立我们要跳转执行的地址)

2、把原先call压进去的返回地址弹出来了,栈顶+4,eip指向返回地址

第七课 堆栈图

1.函数

函数的入口

汇编中的函数

函数有入口出口,但不一定有返回值和参数

2、堆栈

windows堆栈:

什么是堆栈平衡:

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1讲:2015-01-12(进制01) 第2讲:2015-01-13(进制02) 第3讲:2015-01-14(数据宽度-逻辑运算03) 第4讲:2015-01-15(通用寄存器-内存读写04) 第5讲:2015-01-16(内存寻址-堆栈05) 第6讲:2015-01-19(EFLAGS寄存器06) 第7讲:2015-01-20(JCC) 第8讲:2015-01-21(堆栈图) 第8讲:2015-01-21(宝马问题) 第9讲:2015-01-22(堆栈图2) 第10讲:2015-01-23(C语言01_后半段) 第10讲:2015-01-23(C语言完整版) 第11讲:2015-01-26(C语言02_数据类型) 第12讲:2015-01-27(C语言03_数据类型_IF语句) 第13讲:2015-01-28(C语言04_IF语句逆向分析上) 第14讲:2015-01-28(C语言04_IF语句逆向分析下) 第15讲:2015-01-29(C语言04_正向基础) 第16讲:2015-01-30(C语言05_循环语句) 第17讲:2015-02-02(C语言06_参数_返回值_局部变量_数组反汇编) 第18讲:2015-02-02(2015-01-30课后练习) 第19讲:2015-02-03(C语言07_多维数组) 第20讲:2015-02-03(2015-02-02课后练习) 第21讲:2015-02-04(C语言08_结构体) 第22讲:2015-02-05(C语言09_字节对齐_结构体数组) 第23讲:2015-02-06(C语言10_Switch语句反汇编) 第24讲:2015-02-26(C语言11_指针1) 第25讲:2015-02-27(C语言11_指针2) 第26讲:2015-02-28(C语言11_指针3) 第27讲:2015-02-28(C语言11_指针4) 第28讲:2015-03-02(C语言11_指针5) 第29讲:2015-03-03(C语言11_指针6) 第30讲:2015-03-04(C语言11_指针7) 第31讲:2015-03-06(C语言11_指针8) 第32讲:2015-03-09(位运算) 第33讲:2015-03-10(内存分配_文件读写) 第34讲:2015-03-11(PE头解析_手动) 第35讲:2015-03-12(PE头字段说明) 第36讲:2015-03-13(PE节表) 第37讲:2015-03-16(FileBuffer转ImageBuffer) 第38讲:2015-03-17(代码节空白区添加代码) 第39讲:2015-03-18(任意节空白区添加代码) 第40讲:2015-03-19(新增节添加代码) 第41讲:2015-03-20(扩大节-合并节-数据目录) 第42讲:2015-03-23(静态连接库-动态链接库) 第43讲:2015-03-24(导出表) 第44讲:2015-03-25(重定位表) 第45讲:2015-03-26(移动导出表-重定位表) 第46讲:2015-03-27(IAT表) 第47讲:2015-03-27(导入表) 第48讲:2015-03-30(绑定导入表) 第49讲:2015-03-31(导入表注入) 第50讲:2015-04-01(C++ this指针 类 上) 第51讲:2015-04-01(C++ this指针 类 下) 第52讲:2015-04-02(C++ 构造-析构函数 继承) 第53讲:2015-04-03(C++ 权限控制) 第54讲:2015-04-07(C++ 虚函数表) 第55讲:2015-04-08(C++ 动态绑定-多态-上) 第56讲:2015-04-08(C++ 动态绑定-多态-下) 第57讲:2015-04-09(C++ 模版) 第58讲:2015-04-10(C++ 引用-友元-运算符重载) 第59讲:2015-04-13(C++ new-delete-Vector) 第60讲:2015-04-14(C++Vector实现) 第61讲:2015-04-15(C++链表) 第62讲:2015-04-16(C++链表实现) 第63讲:2015-04-16(C++二叉树) 第64讲:2015-04-17(C++二叉树实现) 第65讲:2015-04-20(Win32 宽字符) 第66讲:2015-04-21(Win32 事件-消息-消息处理函数) 第67讲:2015-04-22(Win32 ESP寻址-定位回调函数-条件断点) 第68讲:2015-04-23(Win32 子窗口-消息处理函数定位) 第69讲:2015-04-24(Win32 资源文件-消息断点) 第70讲:2015-04-27(Win32 提取图标-修改标题) 第71讲:2015-04-28(Win32 通用控件-VM_NOTIFY) 第72讲:2015-04-29(Win32 PE查看器-项目要求) 项目一:PE查看器 开发周期(5天) 需求文档 第73讲:2015-05-07(Win32 创建线程) 第74讲:2015-05-08(Win32 线程控制_CONTEXT) 第75讲:2015-05-11(Win32 临界区) 第76讲:2015-05-12(Win32 互斥体) 第77讲:2015-05-13(Win32 事件) 第78讲:2015-05-14(Win32 信号量) 第79讲:2015-05-15(Win32 线程同步与线程互斥) 第80讲:2015-05-18(Win32 进程创建_句柄表) 第81讲:2015-05-20(Win32 以挂起形式创建进程) 第82讲:2015-05-21(Win32 加密壳_项目说明) 项目二:加密壳 开发周期(5天) 需求文档 第83讲:2015-05-28(Win32 枚举窗口_鼠标键盘事件) 第84讲:2015-05-29(Win32 CE练习) 第85讲:2015-06-01(Win32 OD练习) 第86讲:2015-06-03(Win32 ShellCode_远程线程注入) 第87讲:2015-06-04(Win32 加载EXE_模块隐藏) 第88讲:2015-06-09(Win32 IAT_HOOK) 第89讲:2015-06-10(Win32 InlineHook) 第90讲:2015-06-11(Win32 进程通信) 第91讲:2015-06-11(Win32 进程监控_项目说明) 项目三:进程监控 开发周期(5天) 需求文档 第92讲:2015-06-15(硬编码_01) 第93讲:2015-06-16(硬编码_02) 第94讲:2015-06-17(硬编码_03) 第95讲:2015-06-18(硬编码_04) 第96讲:2015-06-19(硬编码_05)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值