質問

Linuxとfreebsdで実行するように設計されたツールをOSXに移植しようとしています。プログラム内では 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 はコンパイルできません。ucontext から EIP にアクセスする方法がわかりません。

役に立ちましたか?

解決

OS X 10.5では命名スキームが変更されたようです。 uc->uc_mcontext->__ss.__eip. 。それ以降のバージョンでは、これは uc->uc_mcontext->__ss.__rip x86_64の場合。

クイックで見つかりました Google検索, 、参照:1, 2

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top