吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8197|回复: 35
收起左侧

[调试逆向] 逆向基础笔记六 汇编跳转和比较指令

  [复制链接]
lyl610abc 发表于 2021-2-28 17:31
本帖最后由 lyl610abc 于 2021-3-12 16:35 编辑

继续更新个人的学习笔记,
其它笔记传送门
逆向基础笔记一 进制篇
逆向基础笔记二 数据宽度和逻辑运算
逆向基础笔记三 通用寄存器和内存读写
逆向基础笔记四 堆栈篇
逆向基础笔记五 标志寄存器
逆向基础笔记七 堆栈图(重点)
逆向基础笔记八 反汇编分析C语言
逆向基础笔记九 C语言内联汇编和调用协定
逆向基础笔记十 汇编寻找C程序入口
逆向基础笔记十一 汇编C语言基本类型
逆向基础笔记十二 汇编 全局和局部 变量
逆向基础笔记十三 汇编C语言类型转换
逆向基础笔记十四 汇编嵌套if else
逆向基础笔记十五 汇编比较三种循环
逆向基础笔记十六 汇编一维数组
逆向基础笔记十七 汇编二维数组 位移 乘法
逆向基础笔记十八 汇编 结构体和内存对齐
逆向基础笔记十九 汇编switch比较if else
逆向基础笔记二十 汇编 指针(一)
逆向基础笔记二十一 汇编 指针(二)
逆向基础笔记二十二 汇编 指针(三)
逆向基础笔记二十三 汇编 指针(四)
逆向基础笔记二十四 汇编 指针(五) 系列完结

JCC指令

cc 代表 condition code(状态码)

Jcc不是单个指令,它只是描述了跳转之前检查条件代码的跳转助记符

例如JNE,在跳转之前检查条件代码

典型的情况是进行比较(设置CC),然后使用跳转助记符之一

CMP EAX,0
JNE XXXXX

条件代码也可以用AND、OR、XOR、加法、减法(当然也可以是CMP)等指令来设置

JCC指令用于改变EIP(CPU要读取的指令地址)

JMP指令

JMP指令:修改EIP的值

JMP指令只影响了EIP,不影响堆栈和其它通用寄存器

JMP 寄存器/立即数 相当于 MOV EIP,寄存器/立即数

CALL指令

CALL指令和JMP指令都会修改EIP的值

但CALL指令会将返回地址(CALL指令的下一条指令地址)压入堆栈

因此也会引起esp的变化

RET指令

call调用跳转后执行完相关代码完要返回到call的下一条指令时使用ret指令

ret指令相当于pop eip

比较指令

CMP指令

指令格式:CMP R/M,R/M/IMM

CMP指令只改变标志寄存器的值

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结果并不保存到第一个操作数中

只是根据相减的结果来改变ZF零标志位的,当两个操作数相等的时候,零标志位置1

例:

MOV EAX,100
MOV EBX,200
CMP EAX,ECX
CMP AX,WORD PTR DS:[405000]
CMP AL,BYTE PTR DS:[405000]
CMP EAX,DWORD PTR DS:[405000]

TEST指令

指令格式:TEST R/M,R/M/IMM

该指令在一定程度上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位

与的操作表项如下:

运算 结果
1 and 1 1
1 and 0 0
0 and 1 0
0 and 0 0

可以看到只要有任一操作数为0时,结果就为0

常见用法:用这个指令,可以确定某寄存器是否等于0

只有当eax=0时 eax and eax才会是0

所以

TEST EAX,EAX

观察ZF(零标志位)就可以判断EAX是否为0

JCC指令表

首先要明确一点,所有的判断跳转指令都是根据标志位来进行判断的

JCC指令也只影响EIP

指令 英文全称 含义 判断标志位
JE, JZ jump equal,jump zero 结果为零则跳转(相等时跳转) ZF=1
JNE, JNZ jump not equal,jump not zero 结果不为零则跳转(不相等时跳转) ZF=0
JS jump sign 结果为负则跳转 SF=1
JNS jump  not sign 结果为非负则跳转 SF=0
JP, JPE jump parity,jump parity even 结果中1的个数为偶数则跳转 PF=1
JNP, JPO jump not parity,jump parity odd 结果中1的个数为偶数则跳转 PF=0
JO jump overflow 结果溢出了则跳转 OF=1
JNO jump not overflow 结果没有溢出则跳转 OF=0
JB, JNAE jump below,jump not above  equal 小于则跳转 (无符号数) CF=1
JNB, JAE jump not below,jump above  equal 大于等于则跳转 (无符号数) CF=0
JBE, JNA jump below equal,jump not above 小于等于则跳转 (无符号数) CF=1 or ZF=1
JNBE, JA jump not below equal,jump above 大于则跳转(无符号数) CF=0 and ZF=0
JL, JNGE jump less,jump not greater  equal 小于则跳转 (有符号数) SF≠ OF
JNL, JGE jump not less,jump greater  equal 大于等于则跳转 (有符号数) SF=OF
JLE, JNG jump less equal,jump not greater 小于等于则跳转 (有符号数) ZF=1 or SF≠ OF
JNLE, JG jump not less equal,jump greater 大于则跳转(有符号数) ZF=0 and SF=OF

免费评分

参与人数 8吾爱币 +8 热心值 +8 收起 理由
xdxf2000 + 1 + 1 我很赞同!
zpzwz + 1 + 1 谢谢@Thanks!
pojiecainiao + 1 + 1 谢谢@Thanks!
忆魂丶天雷 + 1 + 1 大佬我爱你
Fuung + 1 + 1 谢谢@Thanks!
LRQ + 1 + 1 热心回复!
kubosec + 1 + 1 热心回复!
azcolf + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

福仔 发表于 2021-3-1 08:56
JCC 指令集
jz        = ZF=1 跳转
JE        = ZF=1 跳转                这两条指令是一样的, 字节码也一样, 这两个跳转只判断单个标志位
jnz        = ZF=0 跳转
JNE        = ZF=0跳转                加个N就是取反, jz/je 跳转的, jnz/jne就不跳转

JS        = SF=1 跳转, SF=符号标志, SF=1表示结果是负数, JS=结果为负数跳转
JNS        = SF=0 跳转, 跟JS相反

JO        = OF=1 跳转, OF=溢出标志, 加减法结果溢出时跳转
JNO        = OF=0 跳转, 根JS相反

JP        = PF=1 跳转, PF=奇偶标志,  运算结果中"1"的个数为偶数时跳转
JNP        = PF=0 跳转, 跟JP相反

JB        = 等于
JNB        = 不等于

1. EFLAGS 标志寄存器的每个位

J = 跳转
E = 等于
B = 小于 无符号
A = 大于 无符号
N = 取反
L = 小于 有符号
G = 大于 有符号

JE  等于
JB  小于时跳转
JA  大于时跳转

JBE  小于等于
JAE  大于等于
JNBE 大于
JNAE 小于

JNE 不等于
JNB 大于

JL  小于
JG  大于

JLE = 小于等于
JGE = 大于等于
JNGE = 小于, 不大于等于

JA JB 无符号
JL JG 有符号

等于  JE
小于  JB  JL  JNAE  JNGE
大于  JA  JG  JNBE  JNLE
小于等于  JBE  JLE  JAE
大于等于  JAE  JGE  JNB


之前我学习jcc时做的一点笔记....
wujuncheng123 发表于 2021-2-28 17:44
tt0202 发表于 2021-2-28 18:00
kubosec 发表于 2021-2-28 18:42
挺有用,感谢
hai4246 发表于 2021-2-28 19:41
这个有点懵
Fuung 发表于 2021-2-28 19:46
谢谢楼主分享,看看
dbjdyy 发表于 2021-2-28 20:09
学习学习,谢谢啦!看看再说
佩恩m 发表于 2021-2-28 20:16
感谢楼主分享
metiral 发表于 2021-2-28 20:49

感谢楼主分享
Tianqi_ 发表于 2021-2-28 22:24
学习学习,谢谢啦!看看再说
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-23 21:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表