Solaris 模块调试器指南

mdb_lookup_by_name()mdb_lookup_by_obj()

int mdb_lookup_by_name(const char *name, GElf_Sym *sym);

int mdb_lookup_by_obj(const char *object, const char *name, GElf_Sym *sym);

查找指定的符号名称,并将 ELF 符号信息复制到 sym 指向的 GElf_Sym 中。如果找到符号,则函数返回 0;否则返回 -1。name 参数指定符号名称。object 参数通知调试器查找符号的位置。对于 mdb_lookup_by_name() 函数,目标文件缺省为 MDB_OBJ_EXEC。对于 mdb_lookup_by_obj(),对象名称应该为以下名称之一:

MDB_OBJ_EXEC

在可执行文件的符号表(.symtab 部分)中查找。对于内核崩溃转储,这对应于 unix.X 文件或 /dev/ksyms 中的符号表。

MDB_OBJ_RTLD

在运行时链接编辑器的符号表中查找。对于内核崩溃转储,这对应于 krtld 模块的符号表。

MDB_OBJ_EVERY

在所有的已知符号表中查找。对于内核崩溃转储,这包括 unix.X 文件或 /dev/ksyms 中的 .symtab.dynsym 部分,以及每个模块符号表(如果已处理它们)。

object

如果显式指定了特定装入对象的名称,则仅搜索此对象的符号表。可以根据符号名称解析中所述的装入对象命名约定来命名对象。