从可执行文件中转储 debug_loc 部分

Dump debug_loc section from executable

如果在编译 C 文件时向 GCC 提供了默认选项 (-g),我如何从 Linux 上的可执行文件转储 debug_loc 部分?我使用 readelf linux 实用程序。

GCC 默认生成 DWARF4 格式的 DWARF 信息,所以如果我通过 -g-dwarf2 我可以看到 .debug_loc 部分,但是如果信息是使用默认选项生成的,我该如何检查该部分?看不到转储中的部分?

您使用的是最新版本的 binutils 吗?在 Ubuntu 14.04 上,我可以使用 "gcc -g test.c -o test" 构建可执行文件。

使用 "readelf --debug-dump=info test" 我可以确认它正在使用 DWARF 4。

在那之后,你有(至少)两种方法来转储 .debug_line 部分的内容。

readelf --debug-dump=decodedline test

这将转储解码的行号信息。你直接得到 line==address 映射。

还有:

readelf --debug-dump=rawline test

这将为您提供原始 debug_line 内容。

通常,.debug_loc 是为优化代码生成的。尝试使用编译器标志优化您的代码。