0

我正在开发一个 C 库的测试环境。该库广泛使用全局变量,我想在测试代码中检查。不幸的是,我必须动态加载库(使用 libdl)才能重置函数静态变量。这样,我必须使用 dlsym() 加载每个全局变量,并且必须手动将它们一个一个地转换为正确的类型。有什么方法可以自动化并以某种方式获取变量的类型信息?据我所知,libdl 没有这样的功能。我想知道我是否可以链接到 gdb,使用它来访问共享库全局变量,但我也没有找到任何关于这种可能性的线索。

4

1 回答 1

1

不,没有办法获得 some dlsym-ed 符号的类型,因为ELF共享对象不(总是)携带任何类型信息(C++ 除外,使用名称 mangling)。

原则上,可以在没有任何 C 编译器的情况下生成 ELF 共享对象,因此给定符号的类型概念可能不存在,或者类型与 C 约定不兼容。

但是,您可以限制自己使用带有调试信息的共享库。DWARF格式确实携带有关符号的类型(甚至源位置)信息。您可以使用例如libdwarf或其他一些库来解析它。

您可以考虑其他方法:例如,您可以拥有自己的 GCC 插件或MELT扩展(MELT 是一种扩展 GCC 的特定领域语言),在编译(使用 GCC)共享库时将使用这些插件,并在某处注册类型信息.

于 2013-05-06T15:50:01.827 回答