objcopy prepends directory pathname to symbol name

前端 未结 5 855
刺人心
刺人心 2020-12-31 10:30

I am tying to use objcopy to include a binary form of a text file into an executable. (At runtime I need the file as a string). This works fine until the linker

5条回答
  •  死守一世寂寞
    2020-12-31 10:47

    Somewhat ironically you can use objcopy to solve the problem via the --redefine-sym option that allows renaming of symbols...

    If I use objcopy to create an object file from a PNG in another directory:

    $ objcopy -I binary -O elf64-x86-64 -B i386 --rename-section .data=.rodata,alloc,load,data,contents,readonly ../../resources/test.png test_png.o
    

    The resulting object has the following symbols:

    $readelf -s test_png.o -W
    
    Symbol table '.symtab' contains 5 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
         0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
         1: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
         2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    1 _binary_______resources_test_png_start
         3: 0000000000003aaa     0 NOTYPE  GLOBAL DEFAULT    1 _binary_______resources_test_png_end
         4: 0000000000003aaa     0 NOTYPE  GLOBAL DEFAULT  ABS _binary_______resources_test_png_size
    

    These can then be renamed:

    $objcopy --redefine-sym _binary_______resources_test_png_start=_binary_test_png_start test_png.o
    $objcopy --redefine-sym _binary_______resources_test_png_size=_binary_test_png_size test_png.o
    $objcopy --redefine-sym _binary_______resources_test_png_end=_binary_test_png_end test_png.o
    

    Resulting in an object with the symbol names that objcopy would have generated if the PNG had been located in the current directory:

    $readelf -s test_png.o -W
    
    Symbol table '.symtab' contains 5 entries:
       Num:    Value          Size Type    Bind   Vis      Ndx Name
         0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
         1: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
         2: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    1 _binary_test_png_start
         3: 0000000000003aaa     0 NOTYPE  GLOBAL DEFAULT    1 _binary_test_png_end
         4: 0000000000003aaa     0 NOTYPE  GLOBAL DEFAULT  ABS _binary_test_png_size
    

提交回复
热议问题