@[TOC]汇编笔记:jcc:修改eip
eip寄存器
eip寄存器内存储一个地址,这个地址决定cpu下一步要执行的代码
断点
断点功能:让cpu逐条执行指令,便于调试
修改eip内地址的指令:jmp
jmp指令
jmp 地址
注:①jmp与跳转无关,jmp只修改eip的值(存入jmp的地址),cpu根据eip的值进行跳转
②jmp指令不对寄存器和堆栈产生任何影响
③jmp指令通常不需要返回值
call指令
call 地址
注: ①call与跳转无关,call修改eip的值(存入jmp的地址)=,cpu根据eip的值进行跳转
②区别于jmp指令,call指令会向堆栈内压(push)入一个call指令下方的地址(返回地址)
③通常需要ret带回返回值(回到返回地址)
ret指令
retn
①与call指令成对出现,回到call指令的返回地址
②将堆栈中栈顶的值弹到eip中(相当于pop eip)
jcc相关指令
cmp指令
格式
cmp 内存/寄存器,内存/寄存器/立即数
*前后不能同时为内存
解释:cmp区别于sub指令,cmp指令只改变标志寄存器,改变结果与sub指令相同
常见用法:①比较两个数是否相等(通过观察z位),z位为1则两数相等
②比较两个数的大小(观察s位)
注:cmp指令前后的内存或寄存器宽度要一致
test指令
格式
test 内存/寄存器,内存/寄存器/立即数
解释:一定程度上与cmp指令类似,将前后两个数值进行与(and)操作,且只改变标志寄存器
常见用法:判断某个寄存器内是否为空(观察z位)
如果寄存器内的某些位为1,则运算结果不为0
movs指令
格式
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] (MOVSB)
MOVS WORD PTR ES:[EDI],BYTE PTR DS:[ESI] (MOVSW)
MOVS DWORD PTR ES:[EDI],BYTE PTR DS:[ESI] (MOVSD)
解释:
将[ESI]所指向的内存中的数据传送到[EDI]所指向的内存中,并将堆栈整体向上或向下移动(取决于d位,1加0减)(dword 4 word 2 byte 1)
stos指令
格式
stos byte ptr es:[edi] (stosb)
stos word ptr es:[edi] (stosw)
stos dword ptr es:[edi](stosd)
解释:将AL/AX/EAX中的值存储到【EDI】所指向的内存单元中,并将堆栈整体向上或向下移动(取决于d位,1减0加)(dword 4 word 2 byte 1)
rep指令
格式
rep movsd
rep stosd
解释:按计数寄存器(ECX)中指定的次数重复执行字符串指令