ltrace 的替代方案适用于与“-z now”链接的二进制文件?

Alternative to ltrace that works on binaries linked with `-z now`?

,这是我的 Ubuntu 19.10 系统的默认值。它仅适用于与 -z lazy.

链接的二进制文件

是否有替代 ltrace 的替代方案,它可以完成相同的工作,但也适用于 now 二进制文件?

您可以使用 Namhyung 编写的 uftrace 实用程序 金。它以 软件包的形式提供 在 Ubuntu 虽然我建造了 手动来自 master 分支的代码以确保我使用最新的 香草版。例子 main.c:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  puts("Hello World");

  return EXIT_SUCCESS;
}

构建 -z now:

gcc -O2 main.c -z now -o main

ltrace 无效:

$ ltrace ./main
Hello World
+++ exited (status 0) +++

但是 uftrace 会:

$ LD_LIBRARY_PATH=~/uftrace/libmcount ~/uftrace/uftrace -a --force ./main
Hello World
# DURATION     TID     FUNCTION
  58.231 us [ 16283] | puts("Hello World") = 12;

在 Github 的项目站点上查看此线程:跟踪库调用 即使它没有 PLT #592.