問題タブ [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.

0 投票する
1 に答える
130 参照

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 が挿入されない理由についての考え。

0 投票する
3 に答える
380 参照

linux - soname による共有オブジェクトの一部の挿入

FreeType のFT_Load_GlyphandFT_Render_Glyph関数への引数を変更する共有オブジェクトを作成しましたが、現在はLD_PRELOADandで挿入していdlsymます。

これはうまくいきますが、これらの変更を行う方法があるかどうか知りたいです:

  • 特定のホスト (Debian などを実行) で FreeType を使用するすべてのプログラム。
  • FreeType に実際にリンクされていないプログラムを壊すことなく。
  • LD_PRELOADホスト上のすべてのプログラムに単純に適用するのではなく、
  • FreeType の soname が変更されない限り、メンテナンスは必要ありません。と
  • FreeType のファイルやホスト上のプログラムのファイルを変更する必要はありません。

私が思いついた唯一の「解決策」は、醜いハックです。

  • LD_PRELOADすべてのプログラムに対して、常に、遅くて壊れやすいように見えます。また
  • にコピーlibfreetype.so.6.12.3libxxxxtype.so.6.12.3ます。それから
    • soname を にパッチlibxxxxtype.so.6.12.3libxxxxtype.so.6ます。
    • 介在する共有オブジェクトを に対してリンクしますlibxxxxtype.so.6。と
    • たとえば、共有オブジェクトをインストールしますlibfreetype.so.6.999

基本的に、共有オブジェクトのソースまたはそれを使用するプログラムに必ずしもアクセスすることなく、残りの関数を通過させながら、共有オブジェクト内のいくつかの関数に透過的にパッチを適用したいのですが、偽の共有オブジェクトを作成するとsoname では、それを実際の にリンクする (または)libfreetype.so.6きれいな方法がわかりません。dlopenlibfreetype.so.6

これは共有ライブラリを使った最初の実際の実験なので、この質問が間違った仮定をしていたり​​、単に意味をなさない場合はご容赦ください。

0 投票する
0 に答える
34 参照

android - コードを既存の apk に挿入する

既存の apk を指定して、メソッド呼び出しを挿入することは可能ですか? 任意のコード行についてはどうですか?

理想的には、メソッド呼び出し/コード行をインターセプトし、独自のメソッドを呼び出してチェックまたはログを実行し、元の動作を変更せずに元の実行を続行できるようにしたいと考えています。

これが可能であれば、誰かが私を正しい方向に向けて読み物を教えてもらえますか?

ありがとう

0 投票する
0 に答える
294 参照

c++ - LD_PRELOAD を使用して読み取りシステム コールをプリロードすると Chrome が起動しない

libc システム呼び出し、特に open、read、write、close などのファイル i/o 呼び出しをラップする必要があるプロジェクトに取り組んでいます。これをファイル操作の監視サービスとして使用するつもりです。

すべての呼び出しを正常にラップし、gedit でテキスト ファイルを開こうとすると、ラッパーは完全に正常に動作します。しかし、問題は、ラッパーがプリロードされているときに、Google Chrome と他のいくつかのアプリケーションを起動できないことです。特に Google chrome は無限の nanosleep ループに陥ります。以下のトレースを見ることができます。

デバッグ後、問題の原因となっているのは read および close システム コールであることがわかりました。読み取り用のラッパー関数を削除して閉じると、すべて正常に動作します。私にできることの 1 つは、Google Chrome のラッパーを無効にすることですが、誰かが同じ問題に直面し、回避策や解決策を見つけたかどうか知りたいです。私は他のラッパーの実装を見て、それらも試してみましたが、同じ問題が発生します。ここで非常に些細なことを見逃していますか?

read() のラッパー関数は次のとおりです。

0 投票する
0 に答える
401 参照

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 も挿入されますか? アプリケーションに添付されている場合はどうなりますか?フレームワークで動作させることに成功しました。

0 投票する
0 に答える
71 参照

c - fopen/ofstream などのグローバル関数をオーバーライドする

どのファイルがどのモードで開かれているかを知りたいので、そのために fopen/ofstream やその他のファイル処理関数などのグローバル関数をオーバーライドしたい

必須:

出力は次のようになります: name.txt-w

1 つの解決策は、fopen の別の名前でラッパーを作成することですが、fopen はさまざまな場所から呼び出されるため、別の名前を使用したくありません。

上記のシナリオを実装する方法はありますか?