Pregunta

Estoy tratando de puerto de una herramienta para OSX que está diseñado para ejecutarse en Linux y FreeBSD. Hay un caso en el programa donde el acceso a la EIP y EBP es necesario. Esto se hace a través de la ucontext.

Así que he añadido un caso para __APPLE__ para colocar un acceso adecuado a la estructura ucontext.

 9887 #if defined(__FreeBSD__)
 9888         *paddr = uc->uc_mcontext.mc_eip;
 9889 #elif defined(__dietlibc__)
 9890         *paddr = uc->uc_mcontext.eip;
 9891 #elif defined(__APPLE__)
 9892         *paddr = uc->uc_mcontext.ss.eip;
 9893 #else
 9894         *paddr = uc->uc_mcontext.gregs[REG_EIP];
 9895 #endif

Pero UC> uc_mcontext.ss.eip no compila. No estoy seguro de cómo acceder a la EIP de la ucontext.

¿Fue útil?

Solución

Parece que el esquema de nombres cambiado en OS X 10.5, donde debe ser uc->uc_mcontext->__ss.__eip. En versiones posteriores se trata uc->uc_mcontext->__ss.__rip para x86_64.

Encontrados por rápida noreferrer google búsqueda , árbitros: 1 , 2

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top