Доступ к EIP и EBP через ucontext в OS X - PullRequest
4 голосов
/ 28 апреля 2009

Я пытаюсь перенести инструмент на 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.

1 Ответ

6 голосов
/ 28 апреля 2009

Похоже, схема именования изменилась в OS X 10.5, где она должна быть uc->uc_mcontext->__ss.__eip. В более поздних версиях это uc->uc_mcontext->__ss.__rip для x86_64.

Найдено быстрым поиском Google , ссылки: 1 , 2

...