Chris schrieb:
> Das Problem ist das die Funktion "no_cpuid" aufgerufen wird obwohl der
> Befehl unterstützt wird.
Du rufst den CPUID-Befehl ja garnicht auf, insofern ist es egal ob er
unterstützt wird oder nicht. Und der Label-Name "no_cpuid" trifft ja
jetzt keine Aussage, ob er für "cpuid nicht ausgeführt" oder "cpuid
nicht vorhanden" stehen soll.
Edit: Ah, I see...
Du versuchst testweise an den EFLAGS zu drehen, und wenn das 21ste Bit
schreibbar ist, wird die CPU wohl neu genug sein, um auch CPUID zu
verstehen?
1 | pushfd
|
2 | pushfd
|
3 | xor dword [esp],0x00200000
|
4 | popfd
|
5 | pushfd
|
6 | pop eax
|
7 | xor eax,[esp]
|
8 | popfd
|
9 | and eax,0x00200000
|
--> eax = 0x0 wenn Bit21 nicht schreibbar
Evtl. auch interessant: Wie der GCC das per inline-ASM macht:
https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/cpuid.h#L247