Arm 将大端ELF可执行文件转换为小端ELF?

Arm 将大端ELF可执行文件转换为小端ELF?,arm,elf,endianness,Arm,Elf,Endianness,是否有可能在不影响代码功能和文件格式的情况下更改ELF endianness 我的目标是在小型Endian机器上运行一个Big-Endian ARM可执行文件 如果不仅仅是交换字节(我猜是由于标题和更多),那么需要执行哪些步骤?否。endianness不仅仅是文件格式,而是代码中使用的ABI,包括机器指令和数据结构 ARM BE/LE与x86和ARM在这一点上的差异相同,并且无法“翻译”。代码本身可能使用endianess(例如,读取4字节int的第一个字节,并假设它是低字节)。即使你正确地翻译

是否有可能在不影响代码功能和文件格式的情况下更改ELF endianness

我的目标是在小型Endian机器上运行一个Big-Endian ARM可执行文件


如果不仅仅是交换字节(我猜是由于标题和更多),那么需要执行哪些步骤?

否。endianness不仅仅是文件格式,而是代码中使用的ABI,包括机器指令和数据结构


ARM BE/LE与x86和ARM在这一点上的差异相同,并且无法“翻译”。

代码本身可能使用endianess(例如,读取4字节int的第一个字节,并假设它是低字节)。即使你正确地翻译了指令,你也会破坏几乎所有的程序。类似地,由于ELF不对您访问的数据结构的语义进行编码,翻译软件无法判断您正在访问的结构的哪些部分,并且结构中字段的顺序可能是endianness定义的。太模糊了,有两种arm大端模式,这是可能的假设你有一个正确的核心,你是对的,更重要的是芯片/外围设备。在加载和运行此二进制文件之前,您可能会切换endian模式,但这也取决于您的环境是裸机还是操作系统。裸金属的可能性很小,否则不太可能。be-32旧的方法是32位的东西不交换,字节和半字是。所以,您必须知道二进制文件的哪些部分(逐字)是作为字访问的,并交换其他所有内容。be-8字节访问不会更改,但字和半字数据访问会更改,指令不会更改,因此您必须将二进制文件中的字节作为数据字或半字进行隔离,并交换这些字节。简而言之,交换是行不通的。必须将处理器切换到正确的模式,假设你在一个二进制可以工作的芯片上(perhiperals等)