Доступ к EIP и EBP через ucontext в OS X
Вопрос
Я пытаюсь портировать инструмент на osx, который предназначен для работы на Linux и freebsd.В программе есть случай, когда необходим доступ к EIP и EBP.Это делается с помощью ucontext.
Поэтому я добавил обращение к __APPLE__, чтобы предоставить подходящий доступ к структуре 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
Но uc->uc_mcontext.ss.eip не компилируется.Не уверен, как получить доступ к EIP из ucontext.
Решение
Похоже, схема именования изменилась в OS X 10.5, где она должна быть uc->uc_mcontext->__ss.__eip
.В более поздних версиях это uc->uc_mcontext->__ss.__rip
для x86_64.
Найден быстрым поиск в Google, ссылки:1, 2
Не связан с StackOverflow