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

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

文章目录

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

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

三、set 设置目标值指令

总结





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


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


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


C 对应 进位 位 , 此处指的是减法操作是否有借位 ;

P 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是 0 00 还是 1 11 ;

A 对应 辅助进位 位 , 32 3232 位的整型中 , 低 16 1616 位是否发生了 借位 或 进位 ;

Z 对应 零标志 , 如果 减法操作 最后的结果是 0 00 , 该 零标志位 会被设置成 1 11 , 如果 减法操作 结果不为 0 00 , 该 零标志位 会被设置成 0 00 ;

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

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

fd : 表示 32 3232 位标志位 ;


fq : 表示 64 6464 位标志位 ;


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


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






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


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


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






三、set 设置目标值指令


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


set a eax


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


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


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


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


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


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


e : equal , 等于 ;


n : negative , 反条件 ;


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


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


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


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






总结


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


目录
相关文章
|
5月前
|
应用服务中间件 nginx
百度搜索:蓝易云【Nginx【Nginx核心指令(rewrite指令、实战rewrite 、if指令、set和break指令】】
这些核心指令在Nginx的配置文件中发挥重要作用。使用rewrite指令可以实现URL的重写和重定向,if指令可以根据条件执行不同的操作,set指令可以创建自定义变量并设置其值,而break指令可以中断请求处理流程。理解和灵活运用这些指令,可以帮助我们更好地配置和管理Nginx服务器。
68 1
|
存储 Java Android开发
|
安全 Java Android开发
【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
237 0
【Android 逆向】Dalvik 函数抽取加壳 ( Dalvik 下的函数指令抽取与恢复 | dex 函数指令恢复时机点 | 类加载流程 : 加载、链接、初始化 )
|
Android开发 C++
【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
138 0
|
Android开发
【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 )
【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 )
140 0
|
监控 Android开发
【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
134 0
【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
|
Java Linux Android开发
【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )
【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )
213 0
【Android 逆向】函数拦截原理 ( 可执行程序基本结构 | GOT 全局偏移表 | 可执行程序函数调用步骤 )
|
Android开发
【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
299 0
|
4月前
|
存储 程序员
【汇编】“转移”综述、操作符offset、jmp指令
【汇编】“转移”综述、操作符offset、jmp指令
112 1
|
4月前
汇编指令学习(寻址方式)
汇编指令学习(寻址方式)
20 0