一前言
今天文章的主要内容是逆向基础汇编JCC指令举例,JCC指令是满足跳转指令的条件。上一篇文章介绍了基本用法。如果你不明白,你可以先看看我的最后一篇文章。今天,我主要举例加强巩固.
二JCC指令举例
//-------jz-------等于0转移

运行效果如图所示,满足jz 然后直接从断点跳到lab代码贴在下面
_asm{ mov al,0x3 mov cl,0x3 sub al,cl jz lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jnz-------不等于0转移
_asm{ //-------jnz-------不等于0转移 mov eax,0x5 add eax,0x2 jnz lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------js-------为负转移 sf=1
_asm{ //-------js-------为负转移 sf=1 mov al,0x7f add al,0x2 js lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jns-------为正转移 sf=0
_asm{ //-------jns-------为正转移 sf=0 mov al,0x23 add al,0x3 jns lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jo-------溢出转移 of=1
_asm{ //-------jo-------溢出转移 of=1 mov ax,0x7fff add ax,0x3 jo lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jno-------不溢出转移 of=0
_asm{ //-------jno-------不溢出转移 of=0 mov ax,0xffff add ax,0x4 jno lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jp/jpe-------偶转移 PF=1
_asm{ //-------jp/jpe-------偶转移 PF=1 mov eax,0x4 add eax,0x2 jpe lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jnp/jpo-------奇转移 PF=0
_asm{ //-------jnp/jpo-------奇转移 PF=0 mov al,0x4 add al,0x3 jpo lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jc-------位置转移进位标志 CF=1
_asm{ //-------jc-------位置转移进位标志 CF=1 mov al,0xff add al,0x3 jc lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------jnc-------清转移进位标志 CF=0
_asm{ //-------jnc-------清转移进位标志 CF=0 mov al,0x5f sub al,0x2 jnc lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JB/JNAE-------无符号小于转移
_asm{ //-------JB/JNAE-------无符号小于 mov eax,0x8 cmp eax,0x9 jnae lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JNB/JAE-------无符号大于等于转移
_asm{ //-------JNB/JAE-------大于号大于等于 mov eax,0x35 mov ecx,0xf cmp eax,ecx jnb lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JBE/JNA-------无符号小于等于转移
_asm{ //-------JBE/JNA-------无符号小于等于 mov al,0x4 cmp al,0x9 jbe lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JNBE/JA-------无符号大于转移
_asm{ //-------JNBE/JA-------无符号大于 mov eax,0x45 cmp eax,0x2 jnbe lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JL/JNGE-------符号小于转移
_asm{ //-------JL/JNGE-------有符号小于 mov eax,0x80000000 cmp eax,0x1 jl lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JNL/JGE-------符号大于等于转移
_asm{ //-------JNL/JGE-------符号大于等于 mov al,0xff mov cl,0xfd cmp al,cl jnl lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JLE/LNG-------符号小于等于转移
_asm{ //-------JLE/LNG-------符号小于等于 mov ax,0x95 mov cx,0xfe cmp ax,cx jle lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
//-------JNLE/LG-------符号大于转移
_asm{ //-------JNLE/LG-------有符号大于 mov al,0x85 cmp al,0x80 jnle lab mov eax,ecx mov eax,ecx lab: mov eax,ecx }
今天的文章到此为止。如果你什么都不懂,欢迎和我交流。我一定知道一切。这篇文章也付出了一定的努力。喜欢的朋友可以表扬和关注。非常感谢!