2010-04-02 3 views
6

Я читал за this question и задавался вопросом, может ли принятый ответ быть способом определения архитектуры. Например, в asm я могу нажать WORD в стек, а затем проверить SP. Сравните новый SP к старому SP:Определить архитектуру 32/64 бит в сборе

Diff 4 означает 32 бит
Diff 8 означает 64 бит

Я правильно в этой мысли?

+2

У меня создалось впечатление, что 32-разрядные и 64-разрядные инструкции по сборке были разными. По крайней мере, в x86 по сравнению с x86-64. – Powerlord

+2

Я не знаю, но если вы просто хотите обнаружить 64-битную поддержку, вы можете использовать инструкцию CPUID. –

+1

Обычно во время компиляции известно, является ли цель 64-разрядной или 32-разрядной. Было бы очень редко, если бы этот трюк был бы полезен. Кроме того, я предполагаю, что есть способ проверить соответствующий флаг напрямую, не выполняя своего рода трюк. –

ответ

6

Нет, потому что размер вашего стека основан на том, в каком режиме вы работаете (реальный, защищенный, длинный/64, vm86, smm и т. Д.), А не на архитектуре. Например, если ваша сборка работает в защищенном режиме, ваш стек будет 32 бита (или 16, если ваши операнды 16 бит), даже если ваш процессор x86-64.

Как и в упомянутых комментариях, CPUID - это единственный надежный способ рассказать, что такое ваша архитектура.

+0

Хорошо ... это имеет смысл. – IAbstract