文章目录

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

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


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

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

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

  • fq : 表示 646464 位标志位 ;

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

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

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


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

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

三、set 设置目标值指令


set 指令 用于 设置 目标值为 000 或 111 ;

set a eax

eax 是目标值 , 设置成 000 或 111 ;

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

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

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

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

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

  • e : equal , 等于 ;

  • n : negative , 反条件 ;

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

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

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

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

总结


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

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

  1. ARM汇编压栈出栈具体详解

    参考:https://blog.csdn.net/u012874587/article/details/78843940?utm_source=app&app_version=4.8.0 先看 ...

  2. 数据结构 - 栈(链表实现栈的入栈出栈)

    学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历.收获还是很大的. 在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入n ...

  3. c语言堆栈基本代码入栈出栈_C/C++语言栈的出栈入栈操作实现(完整代码)

    /* 完整代码 */ #include using namespace std; #define MAX_SIZE 5 //数组大小 struct stack { int top; int ans[M ...

  4. 实现对顺序表的入栈出栈操作、利用栈将十进制转化成二进制输出【数据结构实验报告】

    文章目录 一.入栈.出栈操作 二.利用栈操作将十进制的数转化为二进制 一.入栈.出栈操作 #include<iostream> using namespace std; #define M ...

  5. Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作

    2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...

  6. 【数据结构】栈详解——压栈/入栈 | 弹栈/出栈 | 获取栈顶元素

    栈 顺序栈 栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈, ...

  7. Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)

    入栈和出栈代码实现如下: package main import ("fmt""errors" )//使用数组来模拟一个栈的使用 type Stack stru ...

  8. 栈的初始化,入栈,出栈,遍历操作(代码实现) [数据结构][Java]

    栈的初始化,入栈,出栈,遍历操作(代码实现) 具体代码如下: package com.ffyc.stack;/*** 创建一个栈结构(使用数组实现)*/ public class ArrayStack ...

  9. c语言堆栈基本代码入栈出栈_c语言的简单的进栈出栈

    这个代码运行时只能输入4个以内的数有输出4个以上就没有输出了求大神看看#include#include#defineStack_Size50typedefstructSeqstack{intelem[ ...

最新文章

  1. docker,containerd,runc,docker-shim之间的关系
  2. Redis 常用命令学四:集合类型命令
  3. bilibili基于 Flink 的机器学习工作流平台在 b 站的应用
  4. TX2+GStreamer+OpenCV读取显示网络摄像头
  5. Nginx担当WebSockets代理
  6. R语言中,保留含有特定字符的元素
  7. PS中的Workflow的创建
  8. Win10系列:C#应用控件基础12
  9. 融资12亿的春雨CEO去世,为什么创业者的焦虑停不下来?
  10. 医学图像中的窗宽、窗位
  11. windows下Python2.7 的 pyOpenGL模块安装
  12. PPT打开之后不能编辑,怎么解决?
  13. [转载]微软下一代掌上操作系统Microsoft Windows Mobile Crossbow
  14. NPN和PNP开关电路使用
  15. Python拆开嵌套列表元组
  16. 企业邮箱搭建模式优劣分析
  17. HM_SCC的调色板模式palette_mode编码流程整理
  18. python爬虫之爬取《贵州农经网》信息
  19. 微信android字体颜色,企业微信使用markdown发送消息,手机端看不到font标签设置的字体颜色...
  20. HTTPS网站提示证书有安全问题的解决方案

热门文章

  1. 林正刚本地化中摸索前进 称中国未来无可比拟
  2. node安装升级过程中遇到的问题汇总
  3. AHOI2009 中国象棋
  4. fullcaledar日历插件
  5. string find简析
  6. “theform._eventtarget 为空或者不是对象”,解决办法
  7. windows server 2003 安装显卡驱动
  8. python文档的数据读取,把读取数据写入到新的表里
  9. 关于TCP和MQTT之间的转换
  10. The Maximum Unreachable Node Set