gpt4 book ai didi

android - dex文件的endian_tag

转载 作者:行者123 更新时间:2023-11-29 19:49:00 26 4
gpt4 key购买 nike

dexes 文件中的 endian_tag 实际上是如何工作的? Documentation指出

The constant ENDIAN_CONSTANT is used to indicate the endianness of the file in which it is found. Although the standard .dex format is little-endian, implementations may choose to perform byte-swapping. Should an implementation come across a header whose endian_tag is REVERSE_ENDIAN_CONSTANT instead of ENDIAN_CONSTANT, it would know that the file has been byte-swapped from the expected form.

建议如果有 REVERSE_ENDIAN_CONSTANT 文件应该使用 big-endian。这对吗?此外——文件的哪一部分应该使用这个大端——整个文件包括 header_item

最佳答案

big-endian 标志将应用于文件中任何位置的任何多字节值。您可以通过查看 DexSwapVerify source 来了解它适用的确切事物集。 ,它负责将所有多字节值从文件的字节顺序转换为主机的字节顺序。这样做是为了让 VM 的其他部分或工具不必在每次访问值时都进行交换。

大多数 Android 设备都是小端 ARM 或 x86,因此交换操作是空操作。一些 Android OS 开发人员在早期使用 PPC Macs,并且有一些 big-endian 设备(例如 MIPS),因此交换代码很重要。

特别感兴趣的一行是:

if (pHeader->endianTag != kDexEndianConstant) {
ALOGE("Unexpected endian_tag: %#x", pHeader->endianTag);
return false;
}

请注意,它不会检查反向字节序常量——代码不希望找到大字节序 DEX 文件。 “原始”DEX 文件应该是小端 - 该格式为它们提供了一种方式,使其成为大端,但我预计大多数工具都会阻塞它们。

优化的 DEX (.odex) 文件以主机字节顺序存储,因此从 .odex 读取时会跳过字节交换步骤。优化的 DEX 文件只能在生成它们的系统上读取。

关于android - dex文件的endian_tag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37322283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com