gpt4 book ai didi

linux - 如何在编译时识别所有 libc 调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:22 25 4
gpt4 key购买 nike

我想对 Linux/BSD 上的 C 代码进行一些分析,以查看库函数的使用频率。所以基本上我想编译代码并在编译步骤之后以某种方式打印出这段代码使用的所有函数。例如:“chown、mmap 等”。我想在几千个开源应用程序上运行它,因此寻求自动化。

有办法吗?

注意。像 strace 或 ptrace 这样的动态检测对我不起作用,因为我无法运行所有应用程序,即使我这样做了,我也可能不会遍历每一个代码路径,因此可能会错过一些可能的调用(即只在错误中发生的调用)条件)

最佳答案

尝试运行 objdump -T | grep GLIBC 在已编译的二进制文件上。

例如:

$ objdump -T /bin/lessecho|grep GLIBC
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 putchar
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 puts
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.4 __stack_chk_fail
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strchr
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __libc_start_main
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strcmp
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3.4 __printf_chk
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 exit
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fwrite
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.3.4 __fprintf_chk
0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.2.5 __cxa_finalize
0000000000202040 g DO .bss 0000000000000008 GLIBC_2.2.5 stderr

nm -D 也会显示类似的数据。

关于linux - 如何在编译时识别所有 libc 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45840439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com