@[toc]
https://github.com/wdfk-prog/linux-study
https://github.com/wdfk-prog/other
编写原因
- 阅读linux源码时,看到了
#define BUG()
的定义,便尝试理解.发现自行理解较难,便去网上搜索.搜索了好久,才终于搞懂这一块干了什么.所以写这个文章,给后面的人减少点搜索工作量. - 网上搜索的要么不够深入,要么根本不是arm架构的实现.
BUG_INSTR 的指令理解
#define BUG()
这块自行理解既可,这里着重说明BUG_INSTR
为什么要这么写
1 | /* |
这里看到用了常数
0xde02
和0xe7f001f2
.这其实是机器码操作码.通过汇编指令转换后的机器码这里就需要根据ARM手册与thumb的手册进行理解了
参考
https://cyrus-studio.github.io/blog/posts/thumb-%E6%B1%87%E7%BC%96%E6%8C%87%E4%BB%A4%E9%9B%86thumb-%E6%8C%87%E4%BB%A4%E7%BC%96%E7%A0%81%E6%96%B9%E5%BC%8F%E7%BC%96%E8%AF%91-thumb-%E6%B1%87%E7%BC%96%E4%BB%A3%E7%A0%81/
的文章进行了理解使用这个网址的
https://armconverter.com/?code=udf+%232
工具进行快速解析既可可以得知该操作码的指令为
udf #2
,即未知的指令,进而触发bug异常需要注意由于arm是小端架构,所以
0xde02
应该传入02de
后记
- 该工具其实上是逆向使用的,这里拿来当成解码工具了.
- 所以嵌入式底层是相通的,学好了,是公用的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
评论