Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 20-04-2018
Mav Mav is offline
Miembro
 
Registrado: jun 2007
Posts: 39
Poder: 0
Mav Va por buen camino
hola

Gracias Casimiro, lo probé, funciona tambien, he pobado otra cosa que aparentemente funciona, aunque
cogido por un pelo, no me convence del todo:
Código Delphi [-]
program Project1;


uses
 WinApi.Windows;
// {$R *.RES}

 function GetFlagZ:Boolean;
  asm
    xor eax, eax
    mov ax, es
    ror ax, 3
    and eax, 1
    //test eax, eax
  end;

begin

   GetflagZ;
   if  GetflagZ  then
   MessageBox(0,'You are running 64 bit','Architecture',MB_OK or MB_ICONINFORMATION)
   else
   MessageBox(0,'You are running 32 bit','Architecture',MB_OK or MB_ICONINFORMATION);

end.
...se supone que en este caso eax va a ser uno o cero, cero en caso de 32 bits ( flag ZF a 1), uno en caso de 64 bits (flag ZF a cero), entonces le estoy haciendo
trampas al compilador....
Se puede también ver si es 32 ó 64 accediendo al TEB (https://en.wikipedia.org/wiki/Win32_...ormation_Block) así:
......................
..........................
4 FS:[0x3C] NT Address of CSR Client Thread
4 FS:[0x40] NT Win32 Thread Information
124 FS:[0x44] NT, Wine Win32 client information (NT), user32 private data (Wine), 0x60 = LastError (Win95), 0x74 = LastError (WinME)

4 FS:[0xC0] NT Reserved for Wow64. Contains a pointer to FastSysCall in Wow64.

4 FS:[0xC4] NT Current Locale
4 FS:[0xC8] NT FP Software Status Register
.......................
.................
Código Delphi [-]
program winteb;

uses
WinApi.Windows;

//{$R *.res}

   var
    caption:  PChar =  'Arquitectura';
    message2: PChar =  'Estas en 32 bits';
    message1: PChar =  'Estas en 64 bits';

begin
 asm
     xor eax,eax
     mov eax, [fs:$0C0 ]
     test eax,eax
   je @@tredos
     push MB_OK+MB_ICONINFORMATION
     push caption
     push message1
     push 0
    call MessageBox
     jmp @@exit
   @@tredos  :
     push MB_OK+MB_ICONINFORMATION
     push caption
     push message2
     push 0
   call MessageBox
  @@exit:
     push 0
    call ExitProcess

 end;

end.
...en este caso no se le pueden hacer trampas al compilador, no funciona..pero se me ha ocurrido otra cosa, vi en el código de "Detours":
Código Delphi [-]
function ___IsCPUIDSupported: Boolean;
asm
  {$IFDEF CPUX86}
  PUSH ECX
  PUSHFD
  POP EAX { EAX = EFLAGS }
  MOV ECX, EAX  { Save the original EFLAGS value . }
... voy a crear una funcion que me de como result los eflagss y luego
sólo habria que comprobar si el bit correspondiente al ZeroFlag está a cero o uno.....
Ya os lo contaré...
Saludos
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Instalar componentes de 32 bits en una PC de win7 a 64 bits uper Windows 10 29-01-2016 18:08:30
compilar programas 32 bits con lazarus 64 bits anubis Lazarus, FreePascal, Kylix, etc. 3 30-10-2013 18:08:44
Ayuda : Delphi 32bits/64 bits luisdevis Varios 4 21-08-2010 19:31:25
Como ejecutar aplicativos dbExpress de 32 bits en 64 bits rolandoj Conexión con bases de datos 0 30-07-2010 19:39:07
Aplicaciones de 32 bits en Windows de 64 bits Gabo Debates 9 25-09-2008 20:49:32


La franja horaria es GMT +2. Ahora son las 15:13:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi