【Android 逆向】x86 汇编 ( cmp 比较指令 | test 比较指令 )

2023-03-29 19:16:42 浏览数 (2)

文章目录

  • 一、cmp 比较指令
  • 二、test 比较指令
  • 总结

一、cmp 比较指令


cmp 指令通过 减法运算 , 影响标志位 CPAZO ;

代码语言:javascript复制
cmp eax, ebx

上述指令执行时 , eax - ebx , 减法运算结果影响标志位 CPAZO ;

  • C 对应 进位 位 , 此处指的是减法操作是否有借位 ;
  • P 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是
0

还是

1

;

  • A 对应 辅助进位 位 ,
32

位的整型中 , 低

16

位是否发生了 借位 或 进位 ;

  • Z 对应 零标志 , 如果 减法操作 最后的结果是
0

, 该 零标志位 会被设置成

1

, 如果 减法操作 结果不为

0

, 该 零标志位 会被设置成

0

;

  • O 对应 溢出标志 , 减法操作是否会导致溢出 , 负数 - 负数 会出现溢出 ;

二、test 比较指令


cmp 指令 和 test 指令 用于 比较

2

个操作数是否相等 ;

test 指令通过 与运算 , 影响标志位 CPSZO ;

  • C 对应 进位 位 , 此处指的是减法操作是否有借位 ;
  • P 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是
0

还是

1

;

  • S 对应 符号标志位 , 计算结果如果是负数 , 该标志位设置成
0

, 计算结果如果是正数 , 该标志位设置成

1

;

  • Z 对应 零标志 , 如果 与操作 最后的结果是
0

, 该 零标志位 会被设置成

1

, 如果 与操作 结果不为

0

, 该 零标志位 会被设置成

0

;

  • O 对应 溢出标志 , 减法操作是否会导致溢出 ; ( 与运算不存在进位 , 没有溢出 )

总结


align 字节对齐 , db 声明字符 / 字符串 , nop 空指令 cmp 比较 , test 比较 call 调用 , jmp 跳转 (a , b , c , g , l , o , p , s , z , e , n) lea , lds , les , lfs , lgs , lss , mov 移动 push , pop , pushf , popf , pushd , popd , pushad , popad , pusha , popa ret , retn , set add , sub , mul , div xor , not , shl , shr , sal , sar , rol , ror , rcl , rcr

0 人点赞