【Android 逆向】x86 汇编 ( push / pop 入栈 / 出栈 指令 | ret / retn 函数调用返回指令 | set 设置目标值指令 )
文章目录
- 一、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 设置目标值指令 )相关推荐
- ARM汇编压栈出栈具体详解
参考:https://blog.csdn.net/u012874587/article/details/78843940?utm_source=app&app_version=4.8.0 先看 ...
- 数据结构 - 栈(链表实现栈的入栈出栈)
学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历.收获还是很大的. 在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入n ...
- c语言堆栈基本代码入栈出栈_C/C++语言栈的出栈入栈操作实现(完整代码)
/* 完整代码 */ #include using namespace std; #define MAX_SIZE 5 //数组大小 struct stack { int top; int ans[M ...
- 实现对顺序表的入栈出栈操作、利用栈将十进制转化成二进制输出【数据结构实验报告】
文章目录 一.入栈.出栈操作 二.利用栈操作将十进制的数转化为二进制 一.入栈.出栈操作 #include<iostream> using namespace std; #define M ...
- Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作
2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...
- 【数据结构】栈详解——压栈/入栈 | 弹栈/出栈 | 获取栈顶元素
栈 顺序栈 栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈, ...
- Go语言_数据结构_栈(包括入栈和出栈,表达式的入栈出栈详细过程代码实现)
入栈和出栈代码实现如下: package main import ("fmt""errors" )//使用数组来模拟一个栈的使用 type Stack stru ...
- 栈的初始化,入栈,出栈,遍历操作(代码实现) [数据结构][Java]
栈的初始化,入栈,出栈,遍历操作(代码实现) 具体代码如下: package com.ffyc.stack;/*** 创建一个栈结构(使用数组实现)*/ public class ArrayStack ...
- c语言堆栈基本代码入栈出栈_c语言的简单的进栈出栈
这个代码运行时只能输入4个以内的数有输出4个以上就没有输出了求大神看看#include#include#defineStack_Size50typedefstructSeqstack{intelem[ ...
最新文章
- docker,containerd,runc,docker-shim之间的关系
- Redis 常用命令学四:集合类型命令
- bilibili基于 Flink 的机器学习工作流平台在 b 站的应用
- TX2+GStreamer+OpenCV读取显示网络摄像头
- Nginx担当WebSockets代理
- R语言中,保留含有特定字符的元素
- PS中的Workflow的创建
- Win10系列:C#应用控件基础12
- 融资12亿的春雨CEO去世,为什么创业者的焦虑停不下来?
- 医学图像中的窗宽、窗位
- windows下Python2.7 的 pyOpenGL模块安装
- PPT打开之后不能编辑,怎么解决?
- [转载]微软下一代掌上操作系统Microsoft Windows Mobile Crossbow
- NPN和PNP开关电路使用
- Python拆开嵌套列表元组
- 企业邮箱搭建模式优劣分析
- HM_SCC的调色板模式palette_mode编码流程整理
- python爬虫之爬取《贵州农经网》信息
- 微信android字体颜色,企业微信使用markdown发送消息,手机端看不到font标签设置的字体颜色...
- HTTPS网站提示证书有安全问题的解决方案