3

假设我有以下源文件:

// file.c:
void f() {}
void g() {}

我使用以下方法将其编译为目标文件gcc -ffunction-sections

$ gcc -c -ffunction-sections file.c -o file.o
# It now has at least two sections: `.text.f' (with `f'), `.text.g' (with `g').

然后我尝试从目标文件中删除部分.text.g(带):g

$ objcopy --remove-section .text.g file.o
objcopy: stQOLAU8: symbol `.text.g' required but not present
objcopy:stQOLAU8: No symbols

那么,有没有办法从目标文件(用 编译-ffunction-sections)中删除特定于函数的部分?

额外信息:

  1. 符号的完整列表file.o是:

    $ objdump -t file.o 
    
    file.o:     file format elf64-x86-64
    
    SYMBOL TABLE:
    0000000000000000 l    df *ABS*  0000000000000000 file.c
    0000000000000000 l    d  .text  0000000000000000 .text
    0000000000000000 l    d  .data  0000000000000000 .data
    0000000000000000 l    d  .bss   0000000000000000 .bss
    0000000000000000 l    d  .text.f        0000000000000000 .text.f
    0000000000000000 l    d  .text.g        0000000000000000 .text.g
    0000000000000000 l    d  .note.GNU-stack        0000000000000000 .note.GNU-stack
    0000000000000000 l    d  .eh_frame      0000000000000000 .eh_frame
    0000000000000000 l    d  .comment       0000000000000000 .comment
    0000000000000000 g     F .text.f        0000000000000007 f
    0000000000000000 g     F .text.g        0000000000000007 g
    
  2. 我的目标是从目标文件中删除某些部分,类似于这样ld --gc-sections做。

或者是否有一些理论上的原因为什么这样的任务绝对超出了范围objcopy并且只能执行ld -r

4

0 回答 0