我想知道是否可以在ARM平台上更改正在运行的应用程序执行的字节顺序。正如你们中的一些人所知,ARM是双端的(支持大和小)我想知道是否可以在Android(或一般的Linux)上设置单个应用程序在执行时使用不同的字节顺序或者是否可以在执行中更改处理器字节顺序。
要阻止对此的一些可能的回应。改变字节顺序(如果可能在应用程序级别上)几乎肯定是一个坏主意,但我正在为ARM平台构建工具,我想知道我使用set工具的应用程序是否可能会这样做。即使这样做可能会对其他应用程序/操作系统造成灾难性后果,我想知道它是否可以由应用程序完成。
从我对ARM的看法到目前为止,似乎只有OS可以在这方面设置处理器的模式。但是我还没有就这个问题找到明确的答案。提前致谢!
答案 0 :(得分:7)
(至少在ARMv7和旧硬件上)肯定是可能的,但你的情绪完全正确 - 其他任何人,请请,为了理智,前向兼容和愤怒的内核开发人员不在Linux / Android中执行此操作 - 根据需要对数据使用REV
,REV16
,REVSH
或VREV
。
ARMv6中引入的SETEND
instruction允许在任何权限级别切换当前执行状态的字节顺序,但是从ARMv8开始,它已被弃用,默认情况下禁用,并且可能在将来完全消失。在ARMv8中,支持硬件中的混合字节序是可选的。
尽管是一个糟糕的想法,但它在目前野外的Android应用程序中显然已经司空见惯了(在其他可能的用途中,它可能是在ARM11上实现strcmp()
的最快方式,并且对于32位任务的SETEND
仿真最近也必须是added to the arm64 kernel,也许也是Cortex-A8),所以你的工具很可能至少也应该知道它。