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
   
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

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

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

Código: asm

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


Eso es trampa :P .
   
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

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.