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
You are not allowed to view links.
You are not allowed to view links.
Register or Login or You are not allowed to view links.
Register or Login
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.