名称
nlist(), nlist64() ― ネームリストからエントリーを取得
構文
nlist()
cc [flag]... cfile ...
#include <nlist.h>
int nlist(const char *file_name, struct nlist *nl);
nlist64()
cc [flag]... cfile ... -lelf [library]...
#include <nlist.h>
int nlist64(const char* file_name, struct nlist64
*nl);
特記事項
シンボルテーブルの型と値の情報の使い方には本質的に移植性がありません。
そのため、これらの情報を扱うプログラムの移植は、 nlist() または nlist64() によって簡単になりますが、
HP-UX のすべてのインプリメンテーションを通じた完全な移植性は期待できません。
説明
nlist() および nlist64() は、基本的に同じ機能を持っていますが、nlist64() は、新しい
nlist 構造 nlist64 を使用し、SOM または ELF ファイルを処理できます。 nlist() は、SOM
ファイルのみしか処理できず、nlist 構造を使用します。
nlist 関数は、 file_name の指す名前の実行可能ファイルのネームリストを調べ、選択的に値のリストを抽出して nl の指す nlist/nlist64 構造体の配列に格納します。 nlist/nlist64 構造体の配列の初期値として変数の名前だけが格納されています。 nlist 関数を呼び出すと、変数名にシンボル情報が付け加えられます。
リストは null ネームで終了します。null ネームとは、構造体の変数名の位置に null 文字列を代入したものです。
指定したファイルのネームリストは各変数名で検索されます。 名前が見つかると、シンボルのタイプ、有効範囲、およびファイル内の値が、ネームリスト構造体に挿入されます。 nlist64() 関数を使用する場合、ELF
ファイルを検索するときに、セクションインデックスが挿入されます。 nlist() および
SOM ファイルを検索するときには、サブスペースインデックスが挿入されます。ワイドモード
システムでは、シンボルの値は 64 ビットです。SOM ファイルを検索するときには、値フィールドにゼロが埋められます。名前が見つからない場合は、ネームリスト構造体のフィールドはゼロに設定されます。構造体 nlist および nlist64 は、インクルードファイル <nlist.h> で定義されます。
シンボルテーブル構造体の詳細については、 a.out(4) と nlist(4) を参照してください。
指定するファイルには、 a.out(4) の a.out ファイル用の構造とシンボルテーブルが必要です。
情報はローダ ld(1) によりシンボルテーブルから抽出されます。
ファイル /stand/vmunix があるマシンでは、このサブルーチンを用いて、保持されているシステム名リストを調べ、最新のシステムアドレスを得ることができます。
戻り値
指定のファイルが見つからないか、見つかってもリンカのシンボルテーブルを持たない不正なオブジェクトファイルの場合は、nlist 構造体のすべてのフィールドに 0 が代入されます。
nlist() はエラーがあると-1、正常終了のときは 0 を返します。
警告
互換性のため、 <a.out.h> はヘッダファイル <nlist.h> を自動的にインクルードします。
しかし使用目的が nlist() だけの場合に <a.out.h> をインクルードするのはあまり勧められません。
それでも <a.out.h> をインクルードする場合には、 #undef n_name を続けて指定する方がよいでしょう。
標準準拠
nlist(): SVID2, SVID3