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.