有没有办法在gcc编译的.o或.a文件中重命名节名?

时间:2017-03-15 19:17:09

标签: c gcc object-files

我有一个使用基于gcc的编译器编译的预编译库,我想将函数从默认的.text部分移动到其他部分名称(让我们说foo) 。有没有办法使用binutils而无需重新编译?

1 个答案:

答案 0 :(得分:0)

.a库或静态库只不过是对象文件的集合。

因此在链接之前,您可以使用objcpy重命名命令来更改节的名称。 同样,您也可以使用“ -redefine-sym”来更改符号名称

-rename-section oldname = newname [,flags]            将部分从旧名称重命名为新名称,可以选择更改            部分的标志到过程中的标志。这有好处            使用链接程序脚本执行重命名            输出保持为目标文件,不会成为链接文件            可执行文件。 示例:-

                 objcopy -I binary -O <output_format> -B <architecture> \
                  --rename-section .data=.rodata,alloc,load,readonly,data,contents \
                  <input_binary_file> <output_object_file>

引用:http://man7.org/linux/man-pages/man1/objcopy.1.html