2010-04-02 35 views
6

Stavo leggendo su this question e mi chiedevo se la risposta accettata potesse anche essere un modo per determinare l'architettura. Per esempio, in asm potrei spingere una WORD in pila e quindi controllare SP. Confrontare la nuova SP alla vecchia SP:Determinazione dell'architettura a 32/64 bit nell'assemblaggio

Diff di 4 a 32 bit significa
Diff di 8 a 64 bit significa

Sono corretto in questo modo di pensare?

+2

Avevo l'impressione che le istruzioni di assemblaggio a 32 e 64 bit fossero diverse. Almeno in x86 rispetto a x86-64. – Powerlord

+2

Non lo so, ma se vuoi semplicemente rilevare il supporto a 64 bit puoi usare l'istruzione CPUID. –

+1

Normalmente è noto al momento della compilazione se il target è 64 bit o 32 bit. Sarebbe un caso raro, infatti, che questo trucco sarebbe utile. Inoltre, la mia ipotesi è che c'è un modo per esaminare direttamente la bandiera rilevante senza dover fare una sorta di trucco come questo. –

risposta

6

No, perché la dimensione dello stack è basata su quale modalità si esegue (reale, protetta, lunga/64, vm86, smm, ecc.), Non sull'architettura. Se l'assembly è in esecuzione in modalità protetta, ad esempio, lo stack sarà di 32 bit (o 16 se gli operandi sono 16 bit), anche se il processore è x86-64.

Come qualcuno nei commenti menzionati, CPUID è l'unico modo affidabile per dire quale sia la tua architettura.

+0

Okay ... ha senso. – IAbstract