Detectar un SO de 64bits

Iniciado por Arkangel, Julio 05, 2013, 03:18:46 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 05, 2013, 03:18:46 PM Ultima modificación: Julio 05, 2013, 03:32:49 PM por Arkangel
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

Código: cpp

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
Código: asm
     xor   eax, eax
     cdq
     xor   edx, [FS:0xC0]
     setnz al
     ret   


Gracias por compartir ;)
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer


Me ha gustado, muy bueno eh!

Saludos,
Nox.

Julio 06, 2013, 05:51:38 PM #4 Ultima modificación: Julio 06, 2013, 06:56:28 PM por Vermillion
El [FS:0xC0] se puede hacer más pequeño por ser IMM32. No encontré ningún modo más bonito :

Código: asm
     xor   eax, eax
     cdq
     mov   al, -40
     xor   edx, [FS:eax]
     setnz al
     ret   


Excelente aporte :D

Julio 06, 2013, 07:15:12 PM #5 Ultima modificación: Julio 07, 2013, 12:41:51 AM por [Zero]
Código: asm

MOV EAX,DWORD PTR FS:[0C0h]
TEST EAX,EAX
SETNE AL
RETN


Mismos bytes pero menos lineas jaja.

Saludos
   
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

Menos bytes... En C/C++ todo valor diferente de 0 es true :P

Código: asm

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

Código: asm

MOV EAX,DWORD PTR FS:[0C0h]
RETN


Eso es trampa :P .
   
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Trampa... :P Claro que no. Es legal.

No sólo es trampa sino que no funcionará. Haciendo esto:
Código: cpp
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:
Código: cpp
bool Is64(){
return __readfsdword(0xC0);
}

Aunque salta un warning diciendo que habrá pérdidas de rendimiento al hacer el casting forzoso.

Saludos ^^
I code for $$$.

(PGP ID 0xCC050E77)
ASM, C, C++, VB6... skilled [malware] developer

-_-... lee las etiquetas. Dice ASM

Muy bueno, a ver si haceis un taller de ASM  :P
Twitter: @The_Pr0ph3t
[email protected]

Si los juntas a todos y los pones a trabajar a tiempo completo, en 15 años tendras el tuto.