.dbug_loc 从二进制文件中丢失
.dbug_loc is missing from binary
我正在检查 ELF 二进制文件以查找下面提到的代码。
我在 Virtual Box 中的 Ubuntu x86_64 系统上的 gcc 7.4.0 上将其编译为:
gcc -g scratch1.c -o scratch1.out
#include <stdio.h>
void do_stuff(int my_arg){
int my_local = my_arg + 2;
int i;
for (i = 0; i < my_local; ++i) printf("i = %d\n", i);
}
int main(){
do_stuff(2);
return 0;
}
然而,当我试图引用 .debug_loc 部分时,它是空的。
objdump --dwarf=loc scratch1.out
scratch1.out: file format elf64-x86-64
不过,我确实看到了其他一些 debug_ 部分
[26] .debug_aranges PROGBITS 0000000000000000 0000103b
0000000000000030 0000000000000000 0 0 1
[27] .debug_info PROGBITS 0000000000000000 0000106b
000000000000035f 0000000000000000 0 0 1
[28] .debug_abbrev PROGBITS 0000000000000000 000013ca
0000000000000125 0000000000000000 0 0 1
[29] .debug_line PROGBITS 0000000000000000 000014ef
00000000000000e6 0000000000000000 0 0 1
[30] .debug_str PROGBITS 0000000000000000 000015d5
00000000000002b5 0000000000000001 MS 0 0 1
需要你的帮助,为什么缺少这一部分。
Need your help why this section is missing.
.debug_loc
部分包含 DW_AT_location
个列表,通常 仅 用于优化代码。
由于您编译 时未进行 优化,因此编译器未生成此部分。尝试构建:
gcc -g -O3 scratch1.c -o scratch1.out
这是我在 gcc 8.3.0 中看到的:
$ gcc -g scratch.c && readelf -WS a.out | grep debug_loc
# no output
$ gcc -g scratch.c -O3 && readelf -WS a.out | grep debug_loc
[32] .debug_loc PROGBITS 0000000000000000 0039db 000230 00 0 0 1
我正在检查 ELF 二进制文件以查找下面提到的代码。 我在 Virtual Box 中的 Ubuntu x86_64 系统上的 gcc 7.4.0 上将其编译为:
gcc -g scratch1.c -o scratch1.out
#include <stdio.h>
void do_stuff(int my_arg){
int my_local = my_arg + 2;
int i;
for (i = 0; i < my_local; ++i) printf("i = %d\n", i);
}
int main(){
do_stuff(2);
return 0;
}
然而,当我试图引用 .debug_loc 部分时,它是空的。
objdump --dwarf=loc scratch1.out
scratch1.out: file format elf64-x86-64
不过,我确实看到了其他一些 debug_ 部分
[26] .debug_aranges PROGBITS 0000000000000000 0000103b
0000000000000030 0000000000000000 0 0 1
[27] .debug_info PROGBITS 0000000000000000 0000106b
000000000000035f 0000000000000000 0 0 1
[28] .debug_abbrev PROGBITS 0000000000000000 000013ca
0000000000000125 0000000000000000 0 0 1
[29] .debug_line PROGBITS 0000000000000000 000014ef
00000000000000e6 0000000000000000 0 0 1
[30] .debug_str PROGBITS 0000000000000000 000015d5
00000000000002b5 0000000000000001 MS 0 0 1
需要你的帮助,为什么缺少这一部分。
Need your help why this section is missing.
.debug_loc
部分包含 DW_AT_location
个列表,通常 仅 用于优化代码。
由于您编译 时未进行 优化,因此编译器未生成此部分。尝试构建:
gcc -g -O3 scratch1.c -o scratch1.out
这是我在 gcc 8.3.0 中看到的:
$ gcc -g scratch.c && readelf -WS a.out | grep debug_loc
# no output
$ gcc -g scratch.c -O3 && readelf -WS a.out | grep debug_loc
[32] .debug_loc PROGBITS 0000000000000000 0039db 000230 00 0 0 1