2017-01-16 94 views
1

是否可以在不损害代码功能和文件格式的情况下更改ELF字节顺序?将Big Endian ELF可执行文件转换为Little Endian字节序?

我的目标是在Little Endian机器上运行Big Endian ARM可执行文件。

如果它不只是交换字节(由于头和更多我猜),所需的步骤是什么?

+0

太模糊了,有两种手臂大端模式,有可能假设你有正确的核心,更重要的是芯片/外围设备。在加载和运行这个二进制文件之前,您可能需要切换endian模式,但这也取决于您的环境是裸机还是操作系统。裸机有一个非常渺茫的机会,否则不太可能。 –

+0

be-32旧的方式32位的东西没有交换,字节和半字是。因此,您必须知道二进制文件的哪些部分(以逐字为单位)作为字访问,并交换其他所有内容。 be-8字节访问不会改变,但是字和半字数据访问是做的,指令不是,所以你将不得不隔离访问的二进制字节作为数据字或者半字并且交换它们。简短的回答,交换不会奏效。必须将处理器切换到正确的模式,假设您处于二进制工作的芯片上(外设等) –

回答

2

否。字节顺序不仅仅是文件格式,而是代码中使用的ABI,无论是机器指令还是数据结构。在这一点上,ARM BE/LE与x86和ARM之间的差异是相同的,并且不能“翻译”。

+0

您能否指出一些特殊差异? – Reflection

+0

代码本身可能使用字节数(例如,读取4字节int的第一个字节并假定它是低字节)。即使您正确地翻译了说明,您也会打破几乎所有的程序。 – BitBank

+0

确实。同样,由于ELF不会对您访问的数据结构的语义进行编码,因此翻译软件不可能知道您访问的结构的哪些部分,并且结构中字段的顺序可能是字节序定义的。 –