2011-12-26 3 views
3

MobileSubstrateのMSHookFunction()を使用して特定のライブラリ関数呼び出しをフックする際に問題があります。 たとえば、memcpyとmemsetをフックするとアプリが起動するとクラッシュしますが、memcmpはうまく機能します。MSHookFunctionを使用して特定のライブラリ呼び出しをフックできない

フックコード自体がそれらの関数呼び出しを使用するため、これが原因であると想定していますか?

memcpyとmemsetをiOSにフックする方法はありますか?

+0

こんにちはDavid、どのようにopendirをフックできるようにあなたのコードを共有できますか? – d123

答えて

0

私は決してこれの底にいませんでした。私は、おそらくMobileSubstrateが私がフックしようとしている同じメモリページの機能を呼び出すと考えていたので、mem保護がすべて乱れてしまったと考えていました。

私は自分自身のフッキング機能を作成することでこれを回避しました。

+0

MSHookFunctionのソースはありますか? saurik git repoistoryからソースをダウンロードしようとしました。 しかし、私はagaintsをコンパイルしようとすると殺された。 私が必要とするのは、MShookFunction関数ではありません。 –

+0

@David Kaplanこのクラスの使用を手伝ってもらえますか?それはMSHookfunction()が見つかりませんhttp://pastie.org/1882125 – zzzzz

+0

@DavidKaplan誰かがこのStackOverflowの投稿を指しているIRCの#基板に来たので、私はここで言及したあなたの "正しい"答えが唯一の方法を示したようにこの問題を解決するには、独自のフックコードを書くことです。それは、彼らが問題を説明することさえ気にしないように奨励しました。利用可能なオプションのように動作することは、1)オープンソースであればそれを修正するか、2)それがどのように動作して再実装するかを理解する。ここでの正しい答えは、おそらく、掛けられている機能が単なるスタブであると言った人でしょう。私はスタブが一般的な場合に引っ掛けることができるかどうか調べることができます。 –

0

memcpyとopendirで同じ状況になりました。 iPhone 5、iOS6.1.2

MSHookFunctionは、元のルーチンのアドレスとして奇数(xxxx3)アドレスを返すことがあります。 ARMにとってはナンセンスです。

+0

独自のフック機能を実装するだけです。 –

+0

@DavidKaplanまず、Supercedesの質問は混乱しているので、より多くの情報を求めてください。この場合、元の関数は何で、 "戻り値"(これはアウトポインタパラメータですか?)の意味... ...奇数アドレスはARMでは間違いなく有効です。つまり、アドレスをThumbでコード化された関数に表す方法です。人々はバグレポートを提出するために一緒に働くことを奨励されなければなりません。これが本当の問題であれば、他の人がそれにぶつかるかもしれません。そうでない場合は、何が起きているのかを調べるべきです。いずれにせよ、あなたは役に立たなかった:( –

0

私もこの問題に遭遇しました。その理由は、ローダーがmemcpyのdlsymとして返す関数は実際には実際の関数ではなく、スタブです。私はアドレスとバイトをダンプしてきた、libsystem_cをdecached、あなたは、このコードは、PC相対で見ることができるように、この次の関数は、dlsymを(RTLD_DEFAULT、「memcpyの」)

 
; void *memcpy_0(void *, const void *, size_t) 
__picsymbolstub4:3947B37C     EXPORT _memcpy_0 
__picsymbolstub4:3947B37C _memcpy_0        ; CODE XREF: _strlcpy+22p 
__picsymbolstub4:3947B37C           ; _strlcpy+32p ... 
__picsymbolstub4:3947B37C     LDR    R12, =(_memcpy_ptr - 0x3947B388) ; j__memcpy 
__picsymbolstub4:3947B380     ADD    R12, PC, R12 ; _memcpy_ptr 
__picsymbolstub4:3947B384     LDR    PC, [R12] ; _memcpy 
__picsymbolstub4:3947B384 ; End of function _memcpy_0 
__picsymbolstub4:3947B388 off_3947B388 DCD _memcpy_ptr - 0x3947B388 

で私に戻っていることを確認し、これをおそらくMSHookが失敗する理由です。 代わりに実際の関数をフックしようとすると、このスタブが呼び出すものが動作します。

+0

おそらく、スタブがトランポリンMobileSubstrateのために短すぎるためです。ARMのトランポリンはわずか8バイトですが... –

関連する問題