OllyDbg---比较、条件跳转指令

比较和条件跳转

CMP

  • 比较两个操作数,相当于SUB指令,但是相减的结果不保存到第一个操作数,而是根据相减的结果来改变零标志位。当两个操作数相等时,零标志位Z置为1。
  • 两个操作数不相等时,零标志位Z被置为0,而且如果第一个操作数大于第二个操作数,符号位S被置为0;如果第一个操作数小于第二个操作数,符号位S被置为1。

TEST

  • 两个操作数进行与操作,结果不保存,但是会改变标志位的结果。
  • 可以用这个指令来判断eax是否等于0。

JUMPS

  • 所有的跳转指令都会指向程序将会跳转的地址

JMP跳转

  • 无条件跳转,总是跳转到指定的地址

JE JZ 结果不为零跳转

  • 两个跳转指令是等价的,书写不同而已,零标志位Z被置为1时跳转

JNE JNZ 结果为零跳转

  • 与JE JZ相反,零标志位为0时,跳转

JS 结果为负跳转

  • 当比较的结果为负时跳转,即符号位S为1时跳转

JNS 结果不为负跳转

  • 与JS相反,当符号位S为0时,跳转

JP JPE 结果中1的个数为偶数跳转

  • 比较的结果中,1的个数要是偶数,奇偶标志P会被置为1,则跳转

JNP JNPE 结果中1的个数为奇数跳转

  • 与JP JPE相反,当比较的结果中1的个数为奇数,奇偶标志位P被置为0时,跳转。

JO 结果溢出跳转

  • 当发生溢出的时候,溢出标志O被置为1,跳转

JNO 结果没有溢出跳转

  • 与JO相反,当溢出标志O为0时,跳转,即没有发生溢出时。

JB JNAE 小于跳转(无符号数)

  • 第一个操作数小于第二个操作数时跳转,即进位借位标志位C被置为1

JNB JAE 大于跳转(无符号数)

  • 与JB JNAE相反,当借位进位标志位为0时跳转,

JBE JNA 小于等于跳转(无符号数)

  • 小于或者等于的时候跳转,需要判断两个标志位,当进位借位标志C被置为1或者零标志Z被置为1时,跳转。

JNBE JA 大于跳转(无符号数)

  • 与JBE相反,当进位借位标志C和零标志位Z都为0时,才会跳转。

JL JNGE 小于跳转(有符号数)

  • 小于的时候跳转,与JB不同,这个指令根据符号标志位S来决定是否跳转
  • 溢出标志O与符号标志S不同时,跳转

JNL JGE 大于等于跳转(有符号数)

JLE JNG 小于等于跳转(有符号数)

JNLE JG 大于跳转(有符号数)

原文地址:https://www.cnblogs.com/KX-Lau/p/12928787.html