0

我正在使用专有的 3rd 方库在 x86 上使用 Ubuntu Linux。这个库使用线程。这是一个带有 C++ 包装器的 C 库,但仅记录了 C++ API,并且给定的示例程序仅使用 C++ API - 但是,我想使用 C API。由于大多数(甚至全部?)C++ 代码似乎都在头文件中,所以我可以查找“幕后”的 C 调用并编写我的 C 代码。不幸的是,有些东西在我的代码中不起作用,所以我尝试ltrace使用示例程序来查看究竟做了什么 C 调用以及以什么顺序:

ltrace -f -l lib3rdparty.so ./ExampleProgram ExampleArgs

但是,它只显示了一些 C 调用,而不是全部。实际上,看起来这些调用甚至不是从 C++ 接口进行的(根据gdb至少其中一个是由 C API 函数之一在内部进行的)。lib3rdparty.so没有符号表:

$ file lib3rdparty.so
lib3rdparty.so: : ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=d29867259007394a1f532720c2073578b27a41e5, stripped

为什么不ltrace显示所有通话,只显示一些?我需要启用某些东西吗?我将尝试从gdb会话中收集 C 调用,但随着网络连接的建立,恐怕我会遇到超时。还有其他方法可以记录对特定库进行的调用吗?

4

0 回答 0