您当前的位置: 首页 >  android

韩曙亮

暂无认证

  • 1浏览

    0关注

    1068博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )

韩曙亮 发布时间:2021-10-12 08:05:07 ,浏览量:1

文章目录
  • 一、push / pop 入栈 / 出栈 指令
  • 二、ret / retn 函数调用返回指令
  • 三、set 设置目标值指令
  • 总结

一、push / pop 入栈 / 出栈 指令

push / pop 入栈 / 出栈 指令 , 可以有如下选项 :

  • f : 表示 16 16 16 位标志位 , 下面列举几个常用的标志位 ;

    • C 对应 进位 位 , 此处指的是减法操作是否有借位 ;
    • P 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是 0 0 0 还是 1 1 1 ;
    • A 对应 辅助进位 位 , 32 32 32 位的整型中 , 低 16 16 16 位是否发生了 借位 或 进位 ;
    • Z 对应 零标志 , 如果 减法操作 最后的结果是 0 0 0 , 该 零标志位 会被设置成 1 1 1 , 如果 减法操作 结果不为 0 0 0 , 该 零标志位 会被设置成 0 0 0 ;
    • O 对应 溢出标志 , 减法操作是否会导致溢出 , 负数 - 负数 会出现溢出 ;
    • S 对应 符号标志位 , 计算结果如果是负数 , 该标志位设置成 0 0 0 , 计算结果如果是正数 , 该标志位设置成 1 1 1 ;
  • fd : 表示 32 32 32 位标志位 ;

  • fq : 表示 64 64 64 位标志位 ;

  • a : 表示 16 16 16 位的通用寄存器 ;

  • ad : 表示 32 32 32 位的通用寄存器 ;

二、ret / retn 函数调用返回指令

ret / retn 是 函数调用返回指令 ;

这 2 2 2 个指令的机器码都是相同的 ;

三、set 设置目标值指令

set 指令 用于 设置 目标值为 0 0 0 或 1 1 1 ;

set a eax

eax 是目标值 , 设置成 0 0 0 或 1 1 1 ;

上述代码中 a 表示无符号大于 , 如果 a 条件达成 , eax 设置为 1 1 1 , 如果不满足 , 则设置为 0 0 0 ;

  • a : above , 无符号 大于 跳转 ;

  • b : below , 吗无符号 小于 跳转 ;

  • g : great , 有符号 大于 跳转 ;

  • l : less , 有符号 小于 跳转 ;

  • e : equal , 等于 ;

  • n : negative , 反条件 ;

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

  • p : 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是 0 0 0 还是 1 1 1 ;

  • s : 对应 符号标志位 , 计算结果如果是负数 , 该标志位设置成 0 0 0 , 计算结果如果是正数 , 该标志位设置成 1 1 1 ;

  • z : 对应 零标志 , 如果 与操作 最后的结果是 0 0 0 , 该 零标志位 会被设置成 1 1 1 , 如果 与操作 结果不为 0 0 0 , 该 零标志位 会被设置成 0 0 0 ;

总结

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

关注
打赏
1663594092
查看更多评论
立即登录/注册

微信扫码登录

0.0487s