問題タブ [function-interposition]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
code-injection - Mach インジェクション: Excel にインジェクションするときに、システム コールのオープンが中断されない
osxinj プロジェクトを使用して、open、read、write、lstat などのシステム コールをフックしました。これをAppleが提供するTextEditアプリケーションに挿入すると、すべて正常に機能しました。textedit を使用して新しいファイルを開くと、opencallback が呼び出され、メッセージが system.log ファイルに記録されました。
Excelに挿入され、以下のコードを使用してopenシステムコールをオーバーライドしようとしました:
opencallback は、TextEdit に注入するときに呼び出されますが、Microsoft Excel に注入すると呼び出されません。ただし、他のシステム コール read、write、lstat の同じ行に記述されたコードは、Excel に挿入されると挿入されます。
Excel に挿入されたときに open が挿入されない理由についての考え。
linux - soname による共有オブジェクトの一部の挿入
FreeType のFT_Load_Glyph
andFT_Render_Glyph
関数への引数を変更する共有オブジェクトを作成しましたが、現在はLD_PRELOAD
andで挿入していdlsym
ます。
これはうまくいきますが、これらの変更を行う方法があるかどうか知りたいです:
- 特定のホスト (Debian などを実行) で FreeType を使用するすべてのプログラム。
- FreeType に実際にリンクされていないプログラムを壊すことなく。
LD_PRELOAD
ホスト上のすべてのプログラムに単純に適用するのではなく、- FreeType の soname が変更されない限り、メンテナンスは必要ありません。と
- FreeType のファイルやホスト上のプログラムのファイルを変更する必要はありません。
私が思いついた唯一の「解決策」は、醜いハックです。
LD_PRELOAD
すべてのプログラムに対して、常に、遅くて壊れやすいように見えます。また- にコピー
libfreetype.so.6.12.3
しlibxxxxtype.so.6.12.3
ます。それから- soname を にパッチ
libxxxxtype.so.6.12.3
しlibxxxxtype.so.6
ます。 - 介在する共有オブジェクトを に対してリンクします
libxxxxtype.so.6
。と - たとえば、共有オブジェクトをインストールします
libfreetype.so.6.999
。
- soname を にパッチ
基本的に、共有オブジェクトのソースまたはそれを使用するプログラムに必ずしもアクセスすることなく、残りの関数を通過させながら、共有オブジェクト内のいくつかの関数に透過的にパッチを適用したいのですが、偽の共有オブジェクトを作成するとsoname では、それを実際の にリンクする (または)libfreetype.so.6
きれいな方法がわかりません。dlopen
libfreetype.so.6
これは共有ライブラリを使った最初の実際の実験なので、この質問が間違った仮定をしていたり、単に意味をなさない場合はご容赦ください。
android - コードを既存の apk に挿入する
既存の apk を指定して、メソッド呼び出しを挿入することは可能ですか? 任意のコード行についてはどうですか?
理想的には、メソッド呼び出し/コード行をインターセプトし、独自のメソッドを呼び出してチェックまたはログを実行し、元の動作を変更せずに元の実行を続行できるようにしたいと考えています。
これが可能であれば、誰かが私を正しい方向に向けて読み物を教えてもらえますか?
ありがとう
c++ - LD_PRELOAD を使用して読み取りシステム コールをプリロードすると Chrome が起動しない
libc システム呼び出し、特に open、read、write、close などのファイル i/o 呼び出しをラップする必要があるプロジェクトに取り組んでいます。これをファイル操作の監視サービスとして使用するつもりです。
すべての呼び出しを正常にラップし、gedit でテキスト ファイルを開こうとすると、ラッパーは完全に正常に動作します。しかし、問題は、ラッパーがプリロードされているときに、Google Chrome と他のいくつかのアプリケーションを起動できないことです。特に Google chrome は無限の nanosleep ループに陥ります。以下のトレースを見ることができます。
デバッグ後、問題の原因となっているのは read および close システム コールであることがわかりました。読み取り用のラッパー関数を削除して閉じると、すべて正常に動作します。私にできることの 1 つは、Google Chrome のラッパーを無効にすることですが、誰かが同じ問題に直面し、回避策や解決策を見つけたかどうか知りたいです。私は他のラッパーの実装を見て、それらも試してみましたが、同じ問題が発生します。ここで非常に些細なことを見逃していますか?
read() のラッパー関数は次のとおりです。
ios - 1 つの iOS スタティック ライブラリの C 関数に DYLD_INTERPOSE を使用すると、バンドル内の他のすべてのライブラリに割り込みますか?
呼び出し元に基づいて動作を変更する必要があるいくつかの C 関数を含むスタティック ライブラリの目的 c があります。https://opensource.apple.com/source/dyld/dyld-210.2.3/include/mach-o/dyld-interposing.hを調べたところ、基本的に C 関数を「スウィズル」するために使用できることがわかりました。
私の質問は - dyld_interpose は、挿入コードを含むすべてのライブラリ/フレームワークで C 関数も挿入しますか?
例えば。
Library1 - C関数を持っていた
Library2 - 挿入コードがあります。Library1に依存
Library1 と Library2 の両方に依存する Library3 も挿入されますか? アプリケーションに添付されている場合はどうなりますか?フレームワークで動作させることに成功しました。
c - fopen/ofstream などのグローバル関数をオーバーライドする
どのファイルがどのモードで開かれているかを知りたいので、そのために fopen/ofstream やその他のファイル処理関数などのグローバル関数をオーバーライドしたい
必須:
出力は次のようになります: name.txt-w
1 つの解決策は、fopen の別の名前でラッパーを作成することですが、fopen はさまざまな場所から呼び出されるため、別の名前を使用したくありません。
上記のシナリオを実装する方法はありますか?