學習:跳轉指令


JZ/JE指令:根據Z標志位進行跳轉

JZ和JE相同(shark恆老師說的,我就記錄下,但是他也說過不是完全相同)

1、直接定位到一個存在je跳轉的地址,然后發現是存在跳轉的,如圖

上圖的Z標志位為1,所以會進行跳轉,但是如果修改Z標志位為0則不會,如圖

同時JE和JZ也相同


JNZ/JNE指令:根據Z標志位進行跳轉

同樣是根據Z標志位進行跳轉,但是是相反的,當Z標志位為0的時候進行跳轉,當Z標志位為1的時候不跳轉

1、修改當前地址的匯編指令為cmp eax,ecx,然后下個地址再修改為jnz 0040101D
2、修改eax的寄存器的值為00000001,ecx的寄存器的值為00000000
3、單步步過

cmp計算的結果不為0,所以Z標志位同樣不為1,所以JNZ/JEZ會進行跳轉,因為跟JE/JZ是相反判斷的


JMP指令:無條件跳轉,不會受標志位的影響

下面兩張圖能夠發現,無論Z標志位是否為1 都會進行跳轉


JS和JNS指令:根據S標志位進行判斷是否跳轉

JS和JNS都是根據S標志位進行判斷的,只是是否跳轉是判斷相反S標志位

1、修改當前地址的匯編指令為cmp eax,ecx,然后下個地址再修改為js 0040101D
2、修改eax的寄存器的值為00000001,ecx的寄存器的值為00000000
3、單步步過

發現S標志位為0,不會進行跳轉,原因十六進制00000001減去十六進制00000000,結果是個正數所以S標志位為0,而JS是當S標志位為0的時候不跳轉,當S標志位為1的時候進行跳轉

JNS就是反一下,當S標志位為0的時候跳轉,為1的時候不跳轉


JP和JPZ指令:根據P標志位進行判斷是否跳轉

JP和JNP都是根據S標志位進行判斷的,只是是否跳轉是判斷相反P標志位

這里需要記錄下JP和JPE是相同的,JNP和JPO是相同的

1、修改當前地址的匯編指令為cmp eax,ecx,然后下個地址再修改為jp 0040101D
2、修改eax的寄存器的值為00000001,ecx的寄存器的值為00000000
3、單步步過

發現不會進行跳轉,原因是P標志位是奇偶標志位,根據二進制數中的1的個數進行判斷的,cmp eax ecx結果是00000001,轉換為二進制那么就是0001,1的個數為奇數那么P標志位就為0,那么也就不跳轉了

JNP就是反一下,當P標志位為0的時候跳轉,為1的時候不跳轉


JO和JNO指令:根據O標志位進行判斷

1、修改當前地址的匯編指令為add eax,ecx,然后下個地址再修改為jo 0040101D
2、修改eax的寄存器的值為7FFFFFF,ecx的寄存器的值為00000001
3、單步步過

O標志位當溢出的時候7FFFFFFF + 0x1 為 80000000 變成有符號位的最小整數,自然O標志位為1,JO指令當O標志位為1的時候則進行跳轉

JNO則相反,當O標志位為0的時候則不進行跳轉


JB和JNB指令:當cmp指令第一個操作數小於第二個操作數的時候則進行跳轉

1、修改當前地址的匯編指令為cmp eax,ecx,然后下個地址再修改為jb 0040101D
2、修改eax的寄存器的值為00000000,ecx的寄存器的值為00000001
3、單步步過

原因是eax小於ecx,C標志位為1,所以進行跳轉

當C標志位改為0的時候,則不進行跳轉

JNB則相反,當C標志位為0的時候,進行跳轉,否則不跳轉


JBE和JNBE指令:當cmp指令第一個操作數小於等於第二個操作數的時候則進行跳轉,並且受標志位C和Z的影響

發現C標志位為0 但是Z標志位為1 ,則進行跳轉

JNBE則相反,JNBE跟JA相同

把C標志位置為0,Z標志位置為0,發現能夠進行跳轉


JL指令:根據S標志位進行判斷是否跳轉,並且計算的是有符號位之間的運算

1、修改當前地址的匯編指令為cmp eax,ecx,然后下個地址再修改為jl 0040101D
2、修改eax的寄存器的值為00000000,ecx的寄存器的值為00000001
3、單步步過

發現S標志位為1,因為cmp指令 結果為十進制0-1 為 -1,是一個負數 所以S標志位為1

可以再把eax修改為FFFFFFF6,那么十進制就為-10,然后重新定位EIP,再進行單步步過

可以發現S標志位沒變化,還是為1,那么也可以證實了計算的是有符號位之間的運算

JL和JB指令之間的區別:http://bbs3.driverdevelop.com/read.php?tid=106427


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM