arm指令备注
来源:互联网 发布:推荐系统算法 编辑:程序博客网 时间:2024/04/30 13:04
arm指令备注
因为arm指令和thumb指令是2字节或者4字节对齐的,一般是16位的thumb指令和32位的arm指令。
if (addr % 4 == 0) {
......
}
/* 使用Thumb指令集的情况 */
else {
......
}
这是因为Arm与Thumb之间的状态切换是通过专用的转移交换指令BX来实现。BX指令以通用寄存器(R0~R15)为操作数,
通过拷贝Rn到PC实现绝对跳转。BX利用Rn寄存器中目的地址值的最后一位判断跳转后的状态,如果为“1”表示跳转到Thumb指令集的函数中,如果为“0”表示跳转到Arm指令集的函数中。而Arm指令集的每条指令是32位,即4个字节,也就是说Arm指令的地址肯定是4的倍数,最后两位必定为“00”。
所以,直接就可以将从符号表中获得的调用地址模4,看是否为0来判断要修改的函数是用Arm指令集还是Thumb指令集。
因为arm指令和thumb指令是2字节或者4字节对齐的,一般是16位的thumb指令和32位的arm指令。
如何区别arm指令和thumb指令?
if (addr % 4 == 0) {
......
}
/* 使用Thumb指令集的情况 */
else {
......
}
这是因为Arm与Thumb之间的状态切换是通过专用的转移交换指令BX来实现。BX指令以通用寄存器(R0~R15)为操作数,
通过拷贝Rn到PC实现绝对跳转。BX利用Rn寄存器中目的地址值的最后一位判断跳转后的状态,如果为“1”表示跳转到Thumb指令集的函数中,如果为“0”表示跳转到Arm指令集的函数中。而Arm指令集的每条指令是32位,即4个字节,也就是说Arm指令的地址肯定是4的倍数,最后两位必定为“00”。
所以,直接就可以将从符号表中获得的调用地址模4,看是否为0来判断要修改的函数是用Arm指令集还是Thumb指令集。
0 0
- arm指令备注
- 备注linux一些指令
- arm指令
- ARM指令
- arm 指令
- ARM指令
- arm指令
- arm指令
- arm指令
- ARM指令
- ARM 指令
- ARM 指令
- ARM指令
- arm 指令
- ARM指令
- ARM-指令
- arm指令
- arm指令移位指令
- 有趣的Linux命令
- Fedora openjdk 中文方框乱码
- AllHookInOne 中的hook基本流程
- Decorator和Factory设计模式的混搭
- 数据库2
- arm指令备注
- docker-py 文件传输put_archive
- 如何提升代码的逼格之设计模式
- Sqlserver查询数据库文件大小和剩余空间
- Linux各种发行版本概述(Redhat系 | Debian系)
- 一些集合的循环输出,从控制器(C)到视图页面(V)
- Java中break与continue用法
- Theano 使用、开发与测试的各种细节记录
- fragment与fragment,activity与fragment传值