【发布时间】:2016-06-27 13:53:08
【问题描述】:
假设有 2 种可能的架构,ARM 和 x86。 有没有办法检测代码运行在哪个系统上,从汇编/机器代码中实现类似的功能?
if (isArm)
jmp to arm machine code
if (isX86)
jmp to x86 machine code
我知道 ARM 机器代码与 x86 机器代码有很大不同。我在想的是一些精心设计的汇编指令,它们会产生相同的二进制机器代码。
【问题讨论】:
-
对于初学者来说,即使是二进制程序格式也不同(ELF 标头中的架构字段),因此除非它在适当的架构上,否则您甚至无法运行该程序。理论上是可以写出这样的机器码的,但是你需要一种特殊的方式来运行它。
-
是的,那么就可以了。
-
神奇的谷歌术语是“多语言”:google.co.uk/webhp?#q=arm+x86+polyglot
-
如果您的代码不知道它在哪台机器上运行,ISA 几乎是您最不用担心的;不知道 RAM 在哪里、存在哪些外围设备以及它们在哪里等的代码不会取得太大的成就。 x86 PC 上可能有一些相当标准化的固件接口(注意;一般不是 x86),但祝您在各种 ARM 机器上好运;)
-
您假设基于 ARM 的计算机的启动方式与 x86 PC 相同,它们将磁盘的第一个扇区读入内存并跳转到它。但是,据我所知,没有基于 ARM 的计算机可以做到这一点。甚至不是所有的 x86 PC 都这样做了,因为有些人专门使用完全不同的 EFI 引导过程。