1

私のコードが「システム」機能を実行するときにどのシンボルが呼び出されるかを知りたいです。

私のサンプル コードでは、ヘッダー stdlib.h が明確に含まれている場合、シンボルは _system$UNIX2003 と呼ばれ、ヘッダーが含まれていない場合、(おそらく) _system という名前の既定のシンボルがあります (サフィックス $UNIX2003 なし)。

次の図は、私の実験結果を示してい ここに画像の説明を入力 ます。実行時に正しいシンボルを検出する方法はありますか (dlsym で試しましたが、動的ライブラリを格納するためのハンドルが必要ですが、dlopen でロードする必要があるライブラリではわかりませんでした) ?

EDIT : この奇妙なシンボルマングリングは、32 ビットアーキテクチャでコンパイルする場合にのみ発生します。

EDIT2: 暗黙の関数ポインタを使用して、正しいシンボルのアドレスを取得するよう提案されました。しかし、コードでその関数を具体的に呼び出さない限り、機能しません。そうしないと、宣言されていない識別子 'system' を使用しているというコンパイル エラーが発生します。

4

0 に答える 0