首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dart堆栈跟踪所有以3/7/b/f (ARM架构)结尾的指令,而我们知道ARM/Thumb/Thumb(2)指令是2或4字节-这怎么可能发生?

Dart堆栈跟踪所有以3/7/b/f (ARM架构)结尾的指令,而我们知道ARM/Thumb/Thumb(2)指令是2或4字节-这怎么可能发生?
EN

Stack Overflow用户
提问于 2021-07-26 09:06:39
回答 1查看 53关注 0票数 0

我看到,Dart堆栈跟踪3/7/b/f (ARM架构)的所有结尾,而我们知道ARM/Thumb/Thumb(2)指令是2或4字节。

示例:https://github.com/dart-lang/sdk/issues/43274

代码语言:javascript
复制
Warning: This VM has been configured to produce stack traces that violate the Dart standard.
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 29278, tid: 29340, name 1.ui
isolate_dso_base: 6fe9d64000, vm_dso_base: 6fe9d64000
isolate_instructions: 6fe9d74000, vm_instructions: 6fe9d66000
    #00 abs 0000006fe9f4e87b virt 00000000001ea87b _kDartIsolateSnapshotInstructions+0x1da87b
    #01 abs 0000006fe9f4e4a3 virt 00000000001ea4a3 _kDartIsolateSnapshotInstructions+0x1da4a3
    #02 abs 0000006fe9d83ca3 virt 000000000001fca3 _kDartIsolateSnapshotInstructions+0xfca3

因此,我想知道这是怎么发生的?我想说的是,ARM将在安卓系统中运行.so文件中的机器指令(汇编)。但是,如果所有指令都不与2/4字节对齐,CPU如何运行它呢?

谢谢你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-26 11:18:49

可以说,lsb是“拇指比特”。

您可以使用bxblx指令在手臂和拇指模式之间切换。

这些指令扫描lsb,如果设置了,它将切换到拇指模式,否则切换到ARM模式。然后分支到address&~1

堆栈跟踪显示调用者函数的返回地址,如果它们是奇数,则表明它们是以thumb模式编写/编译的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68523557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档