【发布时间】:2011-02-03 20:53:35
【问题描述】:
我正在阅读this question 并想知道接受的答案是否也可能是确定架构的一种方式。例如,在 asm 中,我可以将一个 WORD 压入堆栈,然后检查 SP。比较新 SP 和旧 SP:
4 的差异表示 32 位
Diff 为 8 表示 64 位
我的想法正确吗?
【问题讨论】:
-
我的印象是 32 位和 64 位汇编指令是不同的。至少在 x86 与 x86-64 中。
-
我不知道,但如果你只是想检测64位支持你可以使用CPUID指令。
-
通常在编译时就知道目标是 64 位还是 32 位。这种技巧有用的情况确实很少见。另外,我的猜测是有一种方法可以直接检查相关标志,而不必做类似这样的技巧。
-
@OMG:对于 push 和 pop,操作码的解码方式相同。例如 0xFF 在 x86 中推送任何模式。处理器根据您的执行模式确定正确的堆栈大小。
-
对于检测其运行模式的机器代码,请参见返回 16、32 或 64 的函数:Determine your language's version。或者只有 32 对 64,请参阅 x86-32 / x86-64 polyglot machine-code fragment that detects 64bit mode at run-time?
标签: assembly x86 32bit-64bit x86-64