2010-04-02 7 views
6

Ich las über this question und fragte mich, ob die akzeptierte Antwort auch eine Möglichkeit sein könnte, die Architektur zu bestimmen. Zum Beispiel könnte ich in asm ein WORD auf den Stack schieben und dann SP überprüfen. Vergleichen Sie die neue SP zur alten SP:Bestimmen Sie 32/64 Bit Architektur in Assembly

Diff von 4 bedeutet 32-Bit-
Diff von 8 bedeutet 64-Bit-

Bin ich in diesem Denken zu korrigieren?

+2

Ich hatte den Eindruck, dass 32-Bit- und 64-Bit-Assembly-Anweisungen unterschiedlich waren. Zumindest in x86 vs. x86-64. – Powerlord

+2

Ich weiß nicht, aber wenn Sie einfach 64-Bit-Unterstützung erkennen möchten, können Sie die CPUID-Anweisung verwenden. –

+1

Normalerweise ist zur Kompilierzeit bekannt, ob das Ziel 64 Bit oder 32 Bit ist. Es wäre in der Tat ein seltener Fall, dass dieser Trick nützlich wäre. Außerdem denke ich, dass es eine Möglichkeit gibt, die relevante Flagge direkt zu untersuchen, ohne einen solchen Trick machen zu müssen. –

Antwort

6

Nein, weil die Größe Ihres Stacks davon abhängt, in welchem ​​Modus Sie laufen (real, protected, long/64, vm86, smm usw.), nicht in der Architektur. Wenn Ihre Assembly beispielsweise im geschützten Modus ausgeführt wird, ist Ihr Stack 32 Bit (oder 16, wenn Ihre Operanden 16 Bit sind), selbst wenn Ihr Prozessor x86-64 ist.

Wie jemand in den Kommentaren erwähnt, CPUID ist die einzige zuverlässige Möglichkeit zu sagen, was Ihre Architektur ist.

+0

Okay ... das macht Sinn. – IAbstract