我正在构建一个构建多个共享库和可执行文件的项目.用于构建这些二进制文件的所有源文件都位于单个/ src目录中.因此,弄清楚哪些源文件用于构建每个二进制文件(存在多对多关系)并不明显.
我的目标是编写一个脚本,为每个二进制文件解析一组C文件,并确保只从它们中调用正确的函数.
一种选择似乎是尝试从Makefile中提取此信息.但是这对生成的文件和标题不起作用(由于依赖于Includes).
另一种选择可能是简单地浏览调用图,但这会变得复杂,因为很多函数都是通过使用函数指针来调用的.
还有其他想法吗?
您可以先使用调试信息(gcc -g)编译项目,然后使用它objdump
来获取包含的源文件.
objdump -W <some_compiled_binary>
Run Code Online (Sandbox Code Playgroud)
矮人格式应包含您要查找的信息.
<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
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我从test_3编译了目标文件,它位于.../trials目录中.当然,你需要在此周围编写一些脚本来收集相关的源文件名.