gpt4 book ai didi

c - 如何找出用于构建二进制文件的 *.c 和 *.h 文件?

转载 作者:IT王子 更新时间:2023-10-29 00:40:42 27 4
gpt4 key购买 nike

我正在构建一个构建多个共享库和可执行文件的项目。用于构建这些二进制文件的所有源文件都在一个/src 目录中。因此,弄清楚哪些源文件用于构建每个二进制文件并不明显(存在多对多关系)。

我的目标是编写一个脚本来为每个二进制文件解析一组 C 文件,并确保只从中调用正确的函数。

一个选项似乎是尝试从 Makefile 中提取此信息。但这不适用于生成的文件和 header (由于依赖于包含)。

另一种选择可能是简单地浏览调用图,但这会变得很复杂,因为很多函数是通过使用函数指针调用的。

还有其他想法吗?

最佳答案

您可以先使用调试信息 (gcc -g) 编译项目,然后使用 objdump 获取包含了哪些源文件。

objdump -W <some_compiled_binary>

Dwarf 格式应该包含您要查找的信息。

 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
< c> DW_AT_producer : (indirect string, offset: 0x5f): GNU C 4.4.3
<10> DW_AT_language : 1 (ANSI C)
<11> DW_AT_name : (indirect string, offset: 0x28): test_3.c
<15> DW_AT_comp_dir : (indirect string, offset: 0x36): /home/auselen/trials
<19> DW_AT_low_pc : 0x82f0
<1d> DW_AT_high_pc : 0x8408
<21> DW_AT_stmt_list : 0x0

在这个例子中,我从 test_3 编译了目标文件,它位于 .../trials 目录中。那么当然你需要围绕这个写一些脚本来收集相关的源文件名。

关于c - 如何找出用于构建二进制文件的 *.c 和 *.h 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12186656/

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