【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )

简介: 【Android 逆向】x86 汇编 ( call 子函数调用指令 | jmp 跳转指令 | lea 加载指令 | mov 数据传送指令 )

文章目录

一、call 子函数调用指令

二、jmp 跳转指令

三、lea 加载指令

四、mov 数据传送指令

总结





一、call 子函数调用指令


call 指令是 子函数调用指令 , 调用的指令的下一条指令地址入栈 , 会自动跳转到 子函数 目标地址中 , 该地址可能存储在寄存器中 , 也可能是一个常量 ;






二、jmp 跳转指令


jmp 跳转指令 , 默认情况下是无条件跳转 ;


如果想要附加条件跳转 , 如达成某种条件后才能跳转 , 可以附带如下条件 ;


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 ;



上述条件可以进行任意组合 , 如


a 表示大于跳转 ,

e 表示等于跳转 ,

ae 表示大于等于跳转 ,

nae 表示不大于等于跳转 即 小于跳转 ;





三、lea 加载指令


lea 指令 : Load Effect Address 取地址值 , 将 数据地址 加载到 寄存器 中 , 方便进行批量数据处理 , 如批量复制 , 批量修改 ;






四、mov 数据传送指令


mov 指令是数据传送指令 ;


mov a1 , a2 指令的作用是 , 将 a2 中的值写入到 a1 中 ;






总结


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


目录
相关文章
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
1779 2
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
3775 0
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
1274 1
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
476 1
|
安全 编译器
8086 汇编笔记(四):[BX] 和 loop 指令
8086 汇编笔记(四):[BX] 和 loop 指令
|
Shell C语言 SoC
计基2—RISCV指令集介绍与汇编
计基2—RISCV指令集介绍与汇编
1010 1