为什么GCC会将源文件名塞进elf对象中,如何停止它?

为什么GCC会将源文件名塞进elf对象中,如何停止它?,gcc,elf,Gcc,Elf,为什么GCC似乎总是将源文件名填充到elf对象中 其次,如何在编译时停止它 当我想要构建一个树外内核模块时,我的构建目录会被填充到内核对象中。我想不出gcc总是将源文件名/文件路径粘贴到elf对象中的任何原因(调试跟踪除外) 例如: /* test_this_is_a_dumb_string_that_gcc_keeps_adding.c */ int func(void) { int a = 1; return 0; } 然后构建: arm-linux-gcc -c -o t

为什么GCC似乎总是将源文件名填充到elf对象中

其次,如何在编译时停止它

当我想要构建一个树外内核模块时,我的构建目录会被填充到内核对象中。我想不出gcc总是将源文件名/文件路径粘贴到elf对象中的任何原因(调试跟踪除外)

例如:

/* test_this_is_a_dumb_string_that_gcc_keeps_adding.c */
int func(void)
{
    int a = 1;
    return 0;
}
然后构建:

arm-linux-gcc -c -o test.o test_this_is_a_dumb_string_that_gcc_keeps_adding.c
arm-linux-ld -r test.o -o test.ko
然后查看xxd中的字符串:

xxd -g 1 test.ko

strip file.o
对您来说还不够吗?不知道如何将strip注入KBuild系统,而且一旦它链接为“可重新定位”,我认为您就不能将其剥离。您为什么会担心它?广告中的真相表明源文件名可以合法存储。也许你应该看看包含这些信息的ELF部分,看看是否有办法消除这些信息。或者将您的文件重命名为您希望在对象文件中看到的名称-这就解决了问题。@JonathanLeffler文件名位于.symtab部分,您最好不要消除这一点,在使用gcc-S构建时,似乎在assember中使用.file….分配了有问题的数据。。。。因此,如果我可以指示gcc停止设置.file或自己重写它,这可能是一个解决方案。
strip file.o
对您来说是否足够?不知道如何将strip注入KBuild系统,并且一旦它链接为“可重定位”,我认为您就无法将其剥离。您为什么会担心它?广告中的真相表明源文件名可以合法存储。也许你应该看看包含这些信息的ELF部分,看看是否有办法消除这些信息。或者将您的文件重命名为您希望在对象文件中看到的名称-这就解决了问题。@JonathanLeffler文件名位于.symtab部分,您最好不要消除这一点,在使用gcc-S构建时,似乎在assember中使用.file….分配了有问题的数据。。。。所以,如果我可以指示gcc停止设置.file或自己重写它,这可能是一个解决方案。