Bueno, se me ocurrio hablando con Zero una manera de detectar desde 32bits si el SO es de 64 y se me ocurrio esto para solucionar su problema
Gracias Zero por preguntar
bool __declspec(naked) is64BitOS(){
__asm{
mov eax,fs:[0xC0]
test eax,eax
je _32bits
mov eax,1
_32bits:
ret
}
}
Saludos
A dudas interesantes, soluciones interesantes :)
Muy bueno si señor :P
Saludos.
Me he tomado la libertad de minimizar el código. Soy un maniático :P
xor eax, eax
cdq
xor edx, [FS:0xC0]
setnz al
ret
Gracias por compartir ;)
Me ha gustado, muy bueno eh!
Saludos,
Nox.
El [FS:0xC0] se puede hacer más pequeño por ser IMM32. No encontré ningún modo más bonito :
xor eax, eax
cdq
mov al, -40
xor edx, [FS:eax]
setnz al
ret
Excelente aporte :D
MOV EAX,DWORD PTR FS:[0C0h]
TEST EAX,EAX
SETNE AL
RETN
Mismos bytes pero menos lineas jaja.
Saludos
Muy bueno Vermillion, yo probé usando fs[eax+$C0] pero al ser mayor que $7F se seguían gastando 4 bytes para el inmediato ^^ Muy listo usando al :D
Menos bytes... En C/C++ todo valor diferente de 0 es true :P
MOV EAX,DWORD PTR FS:[0C0h]
RETN
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
Menos bytes... En C/C++ todo valor diferente de 0 es true :P
MOV EAX,DWORD PTR FS:[0C0h]
RETN
Eso es trampa :P .
Trampa... :P Claro que no. Es legal.
No sólo es trampa sino que no funcionará. Haciendo esto:
bool __declspec(naked) is64(){
__asm{
mov eax, fs:[0xC0]
ret
}
}
El compilador solo comprobará al para ver el valor booleano.
Haciendo esto sí que serviría:
bool Is64(){
return __readfsdword(0xC0);
}
Aunque salta un warning diciendo que habrá pérdidas de rendimiento al hacer el casting forzoso.
Saludos ^^
-_-... lee las etiquetas. Dice ASM
Muy bueno, a ver si haceis un taller de ASM :P
Si los juntas a todos y los pones a trabajar a tiempo completo, en 15 años tendras el tuto.