时间:2021-05-19
一、JMP 指令:修改EIP 当前运行的下一条指令
JMP 寄存器/立即数
目标类似: mov EIP,寄存器/立即数
CALL指令: 调用函数 CALL 地址A/寄存器
等价:
PUSH 地址B ;保存call的下一条指令地址,压栈,作为返回值,
MOV EIP,地址A/寄存器 ; 将函数首地址作为EIP
RET指令:
等价:LEA ESP,[ESP+4] ; esp = esp + 4
MOV EIP,[ESP-4] ;和 CALL相反,将CALL 指令的下一条指令地址赋值给EIP;
二、比较指令
CMP R/M,R/M/IMM
该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结果并不保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。
TEST指令:指令格式:TEST R/M,R/M/IMM
该指令在一定程序上和CMP指令是类似的(类似and),两个数值进行与操作,结果不保存,但是会改变相应标志位.
常见用法:用这个指令,可以确定某寄存器是否等于0。(观察ZF)
三、JCC指令 16种跳转
比较指令之后,一般都会有分支判断。
根据标志位进行判断,下一步的分支。
JE, JZ 结果为零则跳转(相等时跳转) ZF=1 JNE, JNZ 结果不为零则跳转(不相等时跳转) ZF=0 JS 结果为负则跳转 SF=1 JNS 结果为非负则跳转 SF=0 JP, JPE 结果中1的个数为偶数则跳转 PF=1 JNP, JPO 结果中1的个数为偶数则跳转 PF=0 JO 结果溢出了则跳转 OF=1 JNO 结果没有溢出则跳转 OF=0 JB, JNAE 小于则跳转 (无符号数) CF=1 JNB, JAE 大于等于则跳转 (无符号数) CF=0 JBE, JNA 小于等于则跳转 (无符号数) CF=1 or ZF=1 JNBE, JA 大于则跳转(无符号数) CF=0 and ZF=0 JL, JNGE 小于则跳转 (有符号数) SF≠ OF JNL, JGE 大于等于则跳转 (有符号数) SF=OF JLE, JNG 小于等于则跳转 (有符号数) ZF=1 or SF≠ OF JNLE, JG 大于则跳转(有符号数) ZF=0 and SF=OF
四、思考
1、CALL执行时堆栈有什么变化?EIP有变化吗?
Call执行时,保存了cal函数首地址到EIP,同时将Call函数的首地址压栈;
2、RET执行时堆栈有什么变化?EIP有变化吗?
和Call的过程相反,将前面Call的下一条指令地址,从堆栈中取出来作为EIP。
3、使用汇编指令修改标志寄存器中的某个位的值,实现JCC的十六种跳转.
不允许在OD中通过双击的形式修改标志寄存器.
要通过汇编指令的执行去影响标志位,能用CMP和TEST实现的优先考虑.
见上面的表格;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
汇编语言是一种工具程序设计语言,用于将汇编语言源程序转换为机器语言。 在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbo
本文实例讲述了汇编语言中cmp指令用法。分享给大家供大家参考,具体如下:cmp是比较指令,cmp的功能是相当于减法指令,只是不保存结果.cmp指令执行后,将对标
汇编语言是一种用于电子计算机、微处理器、微控制器或其它可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令
汇编语言和机器语言一样,属于低级语言。它是用便于记忆的助记符表示的机器指令,二者是一一对应的关系。 汇编语言(assemblylanguage)是一种用于电子
汇编语言是独立于机器的程序设计语言。汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言。 在汇编语言中,用助记符代替机器指令的操作码,