Solaris 模块调试器指南

mdb_lookup_by_addr()

int mdb_lookup_by_addr(uintptr_t addr, uint_t flag, char *buf,

				size_t len, GElf_Sym *sym);

查找与指定地址相对应的符号,然后将 ELF 符号信息复制到 sym 指向的 GElf_Sym 中,将符号名称复制到 buf 寻址的字符数组中。如果找到对应符号,则函数返回 0;否则返回 -1。

标志参数指定查找模式,应为以下参数之一:

MDB_SYM_FUZZY

允许基于当前的符号距离设置进行模糊匹配。可以使用内置的 ::set -s 命令控制符号距离。如果已设置显式符号距离(绝对模式),则在符号值与地址的距离不超过绝对符号距离时,地址可以与符号匹配。如果启用智能模式(符号距离 = 0),则在地址位于范围 [符号值, 符号值 + 符号大小) 之内时,它可以与符号匹配。

MDB_SYM_EXACT

不允许模糊匹配。仅当符号值正好等于指定地址时,符号才能与地址匹配。

如果出现符号匹配,则将符号的名称复制到调用方提供的 buf 中。len 参数指定此缓冲区的长度(以字节为单位)。调用方的 buf 的大小至少应为 MDB_SYM_NAMLEN 字节。调试器将名称复制到此缓冲区,并附加结尾空字节。如果名称长度超过了缓冲区的长度,则该名称将被截断,但是它始终包括结尾空字节。