Acesso EIP e EBP via ucontext no OS X
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.
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