Question

Je suis en train de transférer un outil pour Mac OS X qui est conçu pour fonctionner sur Linux et FreeBSD. Il y a un cas dans le programme où l'accès à l'EIP et est RASE besoin. Cela se fait via le ucontext.

Alors j'ai ajouté un cas pour __APPLE__ de placer un accès approprié au struct 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

Mais UC-> uc_mcontext.ss.eip ne compile pas. Je ne sais pas comment accéder à l'EIP du ucontext.

Était-ce utile?

La solution

Il semble que le schéma de nommage changé dans OS X 10.5, où il devrait être uc->uc_mcontext->__ss.__eip. Sur les versions ultérieures est ce uc->uc_mcontext->__ss.__rip pour x86_64.

Trouvé par rapide noreferrer google recherche , refs: 1 , 2

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top