Ver Mensaje Individual
  #3  
Antiguo 20-05-2020
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 12
aguml Va por buen camino
Gracias, me está sirviendo de ayuda aunque esto va para largo ya que una vez me compile tendré que revisar todo y ver como funciona cada cosa y estudiar como funcionan en x64 porque hay muchas que seguramente no coincidan con el funcionamiento de x32.
Tengo ahora mismo tres problemas/dudas:
1-No se que pasa con el tipo CONTEXT que si hago por ejemplo
Código PHP:
CONTEXT con;
con
el único método que sale es operator= y no aparecen ni los registros, ni flags ni nada de esa estructura. Estuve viendo que por internet decian que era por no tener el SDK y no lo tenia porque al instalarlo desde el instalador de RAD 10.3 Rio me daba error diciendo que no se podía conectar a internet o algo así por lo que me lo descargué directamente de Microsoft y lo añadí desde Tools->Options...->Deployment->SDK Manager y no tuve problemas al hacerlo pero sigo teniendo el mismo problema de que no puedo trabajar con el contenido de la estructura CONTEXT. He hecho clic derecho sobre CONTEXT y buscado su declaración y me sale en winnt.h toda la estructura pero sin embargo no puedo usarla T.T
Código PHP:
typedef struct DECLSPEC_ALIGN(16_CONTEXT {

    
//
    // Register parameter home addresses.
    //
    // N.B. These fields are for convience - they could be used to extend the
    //      context record in the future.
    //

    
DWORD64 P1Home;
    
DWORD64 P2Home;
    
DWORD64 P3Home;
    
DWORD64 P4Home;
    
DWORD64 P5Home;
    
DWORD64 P6Home;

    
//
    // Control flags.
    //

    
DWORD ContextFlags;
    
DWORD MxCsr;

    
//
    // Segment Registers and processor flags.
    //

    
WORD   SegCs;
    
WORD   SegDs;
    
WORD   SegEs;
    
WORD   SegFs;
    
WORD   SegGs;
    
WORD   SegSs;
    
DWORD EFlags;

    
//
    // Debug registers
    //

    
DWORD64 Dr0;
    
DWORD64 Dr1;
    
DWORD64 Dr2;
    
DWORD64 Dr3;
    
DWORD64 Dr6;
    
DWORD64 Dr7;

    
//
    // Integer registers.
    //

    
DWORD64 Rax;
    
DWORD64 Rcx;
    
DWORD64 Rdx;
    
DWORD64 Rbx;
    
DWORD64 Rsp;
    
DWORD64 Rbp;
    
DWORD64 Rsi;
    
DWORD64 Rdi;
    
DWORD64 R8;
    
DWORD64 R9;
    
DWORD64 R10;
    
DWORD64 R11;
    
DWORD64 R12;
    
DWORD64 R13;
    
DWORD64 R14;
    
DWORD64 R15;

    
//
    // Program counter.
    //

    
DWORD64 Rip;

    
//
    // Floating point state.
    //

    
union {
        
XMM_SAVE_AREA32 FltSave;
        
struct {
            
M128A Header[2];
            
M128A Legacy[8];
            
M128A Xmm0;
            
M128A Xmm1;
            
M128A Xmm2;
            
M128A Xmm3;
            
M128A Xmm4;
            
M128A Xmm5;
            
M128A Xmm6;
            
M128A Xmm7;
            
M128A Xmm8;
            
M128A Xmm9;
            
M128A Xmm10;
            
M128A Xmm11;
            
M128A Xmm12;
            
M128A Xmm13;
            
M128A Xmm14;
            
M128A Xmm15;
        } 
DUMMYSTRUCTNAME;
    } 
DUMMYUNIONNAME;

    
//
    // Vector registers.
    //

    
M128A VectorRegister[26];
    
DWORD64 VectorControl;

    
//
    // Special debug control registers.
    //

    
DWORD64 DebugControl;
    
DWORD64 LastBranchToRip;
    
DWORD64 LastBranchFromRip;
    
DWORD64 LastExceptionToRip;
    
DWORD64 LastExceptionFromRip;
CONTEXT, *PCONTEXT
2-Tengo varios TList los cuales uso para guardar cosas como datos de DLLs, BPs, HBPs... los cuales cuando ya no lo necesito tengo que liberar toda esa memoria y en x32 lo tenia así:
Código PHP:
delete ListaBPs->Items[pos];
ListaBPs->Delete(pos); 
En la primera linea, donde intento liberar la memoria del item, me da el siguiente Warning:
Código:
[bcc64 Warning] THiloDebugger.cpp(1839): cannot delete expression with pointer-to-'void' type 'void *'
No se si tengo que preocuparme o no por esa advertencia.

3-No me acepta la estructura __try catch(...), en su lugar he tenido que usar __try __except(EXCEPTION_EXECUTE_HANDLER)
¿hay alguna diferencia entre uno y otro? y por otro lado ¿que diferencia hay entre __try catch(...) y try catch(...)?
Ahora mismo los tengo así:
Código PHP:
void __fastcall TAntiAntiDebug::DeactiveInvalidHandle(bool estado)
{
        
__try{
                if(
HiloDepuracion != NULL)
                        
HiloDepuracion->DeactiveInvalidHandle(estado);
        }
__except(EXCEPTION_EXECUTE_HANDLER){
        }

Pero no se si con un try catch(...) bastaría.

Última edición por aguml fecha: 20-05-2020 a las 10:54:54.
Responder Con Cita