2009-04-28 23 views
4

我想將一個工具移植到設計爲在linux和freebsd上運行的osx。該計劃有一個需要訪問EIP和EBP的案例。這是通過ucontext完成的。在OS X上通過ucontext訪問EIP和EBP

因此,我添加了一個用於__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不能編譯。不知道如何從ucontext訪問EIP。

回答

6

它看起來在OS X 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 2009-04-28 13:08:39