Pergunta

Eu estou tentando porta uma ferramenta para OSX que é projetado para rodar em Linux e FreeBSD. Há um caso no programa onde o acesso ao EIP e EBP é precisa. Isto é feito através da ucontext.

Então, eu adicionei um caso para __APPLE__ para colocar um acesso adequado para a estrutura 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

Mas Uc-> uc_mcontext.ss.eip não compila. Não tenho certeza como acessar a EIP da ucontext.

Foi útil?

Solução

Parece que o esquema de nomenclatura alterada no OS X 10.5, onde deveria estar uc->uc_mcontext->__ss.__eip. Em versões posteriores este é uc->uc_mcontext->__ss.__rip para x86_64.

Encontrado por rápida google Search , refs: 1 , 2

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top