2009-04-28 8 views
4

linuxとfreebsdで動作するように設計されたosxに移植しようとしています。 EIPとEBPへのアクセスが必要な場合があります。これはucontextを介して行われます。OS Xのucontext経由でEIPとEBPにアクセス

したがって、ucontext構造体に適切にアクセスするために__APPLE__のケースを追加しました。

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はコンパイルされません。 ucontextからEIPにアクセスする方法がわかりません。

答えて

6

OSX 10.5では、命名方式が変更されているようです(ここではuc->uc_mcontext->__ss.__eip)。それ以降のバージョンでは、これはx86_64の場合はuc->uc_mcontext->__ss.__ripです。 google search迅速、レフリーによって発見

12

+0

Thxをも、ポインタをさ__ss。だからそれはでなければならない: uc-> uc_mcontext - > __ ss .__ eip; – optixx

+0

ありがとう、修正済み – Hasturkun

+0

「__eip」ではなく「__rip」と呼ばれるようになったので、今すぐです:uc-> uc_mcontext - > _ ss .__ rip; –

関連する問題