我有目标文件uart.o我正在尝试从二进制文件中获取源文件的完整路径。我使用的是GCC、瑞萨和COSMIC编译器。我使用命令- string -a -f uart.o | grep "uart.c“从字符串命令中获取包含路径的行。我得到的是随机数据和线条。我可以通过shell以任何其他方式从目标文件中获取源文件的完整路径吗?
发布于 2015-08-05 20:06:06
目标文件通常不对相应源文件的完整路径进行编码。这样做会带来安全隐患,因为它会将本地文件系统布局的详细信息暴露给任何有权访问该二进制文件的人。
无论如何,编译器本身通常只在相对路径上运行,而不知道或不关心完整的文件系统路径。
发布于 2016-12-20 09:04:48
如果您的对象/库/二进制文件是使用调试符号(gcc
的-g
选项)构建的,则此信息将包含在调试信息中。您可以使用gdb info sources
命令来获取此列表。
作为shell一行程序:
$ 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:
$
此对象文件以前是按如下方式构建的:
$ gcc -g -c my_c_file.c -o my_obj_file.o
$
输出列表可能以逗号和换行符分隔,因此您可能需要一些sed
或awk
后处理来将其转换为每行一个条目的纯列表。通过管道将输出输出到sed 's/ \+$//;s/, /\n/g;s/,$//'
非常有用,可以将每个源文件放在各自的行上,而不使用逗号。
发布于 2016-10-25 22:26:43
不是很理想,但是如果您使用调试开关进行编译,则可以从运行objdump -s -j.debug_info获得路径
路径将出现在输出中。
https://stackoverflow.com/questions/31831996
复制相似问题