首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用shell脚本从对应的二进制目标文件中获取源C文件的完整路径

如何使用shell脚本从对应的二进制目标文件中获取源C文件的完整路径
EN

Stack Overflow用户
提问于 2015-08-05 20:03:52
回答 3查看 906关注 0票数 1

我有目标文件uart.o我正在尝试从二进制文件中获取源文件的完整路径。我使用的是GCC、瑞萨和COSMIC编译器。我使用命令- string -a -f uart.o | grep "uart.c“从字符串命令中获取包含路径的行。我得到的是随机数据和线条。我可以通过shell以任何其他方式从目标文件中获取源文件的完整路径吗?

EN

回答 3

Stack Overflow用户

发布于 2015-08-05 20:06:06

目标文件通常不对相应源文件的完整路径进行编码。这样做会带来安全隐患,因为它会将本地文件系统布局的详细信息暴露给任何有权访问该二进制文件的人。

无论如何,编译器本身通常只在相对路径上运行,而不知道或不关心完整的文件系统路径。

票数 1
EN

Stack Overflow用户

发布于 2016-12-20 09:04:48

如果您的对象/库/二进制文件是使用调试符号(gcc-g选项)构建的,则此信息将包含在调试信息中。您可以使用gdb info sources命令来获取此列表。

作为shell一行程序:

代码语言:javascript
运行
复制
$ gdb -q -ex "set height 0" -ex "info sources" -ex quit my_obj_file.o
Reading symbols from my_obj_file.o...done.
Source files for which symbols have been read in:

/home/ubuntu/my_c_file.c

Source files for which symbols will be read in on demand:


$ 

此对象文件以前是按如下方式构建的:

代码语言:javascript
运行
复制
$ gcc -g -c my_c_file.c -o my_obj_file.o
$

输出列表可能以逗号和换行符分隔,因此您可能需要一些sedawk后处理来将其转换为每行一个条目的纯列表。通过管道将输出输出到sed 's/ \+$//;s/, /\n/g;s/,$//'非常有用,可以将每个源文件放在各自的行上,而不使用逗号。

票数 1
EN

Stack Overflow用户

发布于 2016-10-25 22:26:43

不是很理想,但是如果您使用调试开关进行编译,则可以从运行objdump -s -j.debug_info获得路径

路径将出现在输出中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31831996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档