将符号表中的符号名称替换为可重定位ELF对象文件中的新长名称

时间:2017-05-18 04:46:47

标签: c unix elf object-files

这适用于可重定位的ELF目标文件,不是完全链接的ELF或ELF共享库。

目前,如果有一个程序,如:

main.c:
    int main() {
        foo();
        return 0;
    }

并使用 gcc -c main.c 进行编译 它会生成一个main.o

我想要完成的是用“傻瓜食物”(更长的名字)取代对 foo 的号召 AFTER 已创建目标文件。

  

因为如果我们延伸超过 foo

的长度3,目前可重定位的ELF将被破坏

任何见解都会有所帮助。

先谢谢。

1 个答案:

答案 0 :(得分:2)

  

我想要完成的是用“傻瓜”或“食物”取代对foo的号召。 (较长的名称)在已经创建目标文件之后。

这很有可能,但远非微不足道。

首先,您需要将.symtab部分复制到文件末尾,并将所需的字符串food\0附加到其中。

其次,如果在上一步中添加了部分,则需要更新部分表并将原始.symtab的偏移量和长度替换为偏移量和大小。

最后,您需要找到符号(在.symtab部分中)并使用第一步中添加的st_name字符串的偏移量更新其food

这就是它的全部内容。