【发布时间】:2015-09-01 06:01:35
【问题描述】:
是否可以在 GCC 中编译 MSB 字节序的二进制文件?如果是这样,它们在执行时会正常工作吗?
【问题讨论】:
-
在哪个架构上?在 SPARC 或 Power 上,您可能会发现 MSB 是默认设置。在 Intel 上,可能你不能。
-
在英特尔上。如果我以某种方式将每个 ELF 标头条目更改为 little-endian 二进制文件中的 MSB,那会正确执行吗?
-
否;您必须对代码进行许多其他更改才能使其有最小的工作机会。基本上,每个数字都必须从 little-endian 改写为 big-endian。
-
我想你是时候去尝试一下了。我不确定,我也不愿意花太多精力去思考它——在我看来,这似乎是一种徒劳的练习。稍加思考,我认为英特尔的内核很有可能会简单地拒绝执行 MSB ELF 可执行文件。它被编译为期望 LSB,并且知道它不知道如何处理替代方案。要解决这个问题,您必须重建内核和动态加载程序
ld.so.1。给你最好的英国人。 -
您必须使用跨工具链才能在小端主机上生成大端代码。因为代码中还有其他地方处理字节序,网络
htons和朋友等函数在编译代码中无法轻松修复。