問題タブ [dlsym]

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 投票する
2 に答える
2551 参照

c++ - dlsym を使用したクラス シンボルへのアクセス

共有ライブラリ (.so) からクラス シンボルにアクセスしたいのですが、これは正しい方法ですか?

これが正しい方法であれば、キャスト用の MyClass ヘッダーが必要です。ヘッダーを含めずにこれを行う方法が他にあるかどうか知りたいですか?

ありがとう

0 投票する
2 に答える
4508 参照

c++ - LD_PRELOAD を使用して dlsym 呼び出しをインターセプトするにはどうすればよいですか?

アプリケーションの dlsym への呼び出しをインターセプトしたい。dlsym をプリロードし、 dlsym 自体を使用して実際のアドレスを取得するように .so 内で宣言しようとしましたが、明らかな理由でうまくいきませんでした。

プロセスのメモリ マップを取得し、libelf を使用して、読み込まれた libdl.so 内の dlsym の実際の場所を見つけるよりも簡単な方法はありますか?

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

mysql - dlopen ロード ライブラリは正しいが、プログラムを実行すると、結果が正しくない

dlopen、dlsym ロード ライブラリ関数を使用します。プログラムを実行すると、この問題に遭遇しました:</p>

  1. dlopen load 関数を使用し、正しい関数を呼び出しますが、結果は正しくありません
  2. dlopen を使用せず、関数を直接呼び出すと、正しい結果が得られます

どうすれば問題を見つけることができますか?

例:</p>

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

ios - iOS でシステム ライブラリ (例: libresolv) に dlopen() と dlsym() を使用することは許可されていますか?

iOS でシステム ライブラリ (例: libresolv) に dlopen() と dlsym() を使用することは許可されていますか?

事前にご回答いただきありがとうございます!

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

android - Android4.2 libdvm.so dexFileParse の関数が見つかりません

Android2.3 内の libdvm.so では、コードを使用して dexFileParse コードを呼び出すことができます: void * handle=dlopen("/system/lib/libdvm.so",RTDL_LAZY); void *pFunc=dlsym(ハンドル,"dexFileParse");


libdvm.so は _Z16dexFileParseXXX をエクスポートしますが、dlsym(handle,"dexFileParse") から dexFileParse のアドレスを取得できません。あなたは言う:あなたできるcplusplusの


dexFileParse を呼び出すにはどうすればよいですか?

ありがとう

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

c++ - シンボルが重複している場合に dlsym を確実に使用するには?

こんばんは、私は現在、Plux.netモデルに基づく C++/Linux のプラグイン システムに取り組んでいます。

簡単にするために、基本的には extern C を使用してシンボルを宣言し (pluginInformation と呼びましょう)、プラグイン マネージャーは事前に構成されたインポート (.so) でそのシンボルを探します。

問題は、メイン アプリケーションが同じシンボルを宣言していることです。それだけでなく、それが持つ依存関係にもシンボルがある可能性があります。(この pluginInformation では、モジュールはプラグおよび/またはスロットを公開できるため)。

そのため、私の PluginManager が起動すると、最初にメイン プログラムでシンボルを見つけようとし ( dlopenに NULL を渡します)、次にその依存関係のいずれかでシンボルを見つけようとします ( dl_iterate_phdrを使用)。そして最後に一連の構成インポートをdlopenします (ユーザーが構成した .so のパスを読み取り、それらをdlopenし、最後にpluginInformationシンボルを dlsym します)。

すべてのモジュールで見つかった pluginInformation のコレクションは、拡張機能 3 を構築するために使用されます。

メイン プログラムでシンボルを宣言し、dlopenを使用してインポートをロードすると、機能します (インポートを dlopen するときにフラグ RTLD_DEEPBIND を渡す限り)。

しかし、アプリケーションの依存関係については、アプリケーションの起動時にこの .sos がロードされたため、フラグを渡すオプションがありません (できるが、何もしません)。

依存関係 (起動時にロードされたもの) から取得したシンボルを使用しようとすると、セグメンテーション違反が発生します。問題は、シンボルテーブルに同じ名前のシンボルがいくつかあることだと思います。奇妙なことは、いくつかのシンボルがあることを正しく識別しているように見え、シンボルがある .so の正しいパスさえ教えてくれることです。宣言されていますが、シンボルにアクセスするとすぐにセグメンテーション違反が発生します。メインプログラムまたは依存関係の1つでのみシンボルを宣言すると、すべてが正しく機能します。

メイン プログラムと dlsym を使用したスト​​ラト アップ インポートの間で重複するシンボルを管理するにはどうすればよいですか?

私はマングリングを維持することを考えていて、シンボルテーブルを通過するシンボルを見つけようとしましたが、これが可能かどうかはわかりません(モジュール内のすべてのシンボルをプログラムでリストします)。

PD: 申し訳ありませんがコードを投稿しませんでしたが、今家にいません。何をしようとしているのかについての説明が十分に明確であることを願っています。そうでない場合は、明日コードを投稿できます。