这适用于可重定位的ELF目标文件,不是完全链接的ELF或ELF共享库。
目前,如果有一个程序,如:
main.c:
int main() {
foo();
return 0;
}
并使用 gcc -c main.c 进行编译 它会生成一个main.o
我想要完成的是用“傻瓜或食物”(更长的名字)取代对 foo 的号召 AFTER 已创建目标文件。
因为如果我们延伸超过 foo
的长度3,目前可重定位的ELF将被破坏
任何见解都会有所帮助。
先谢谢。
答案 0 :(得分:2)
我想要完成的是用“傻瓜”或“食物”取代对foo的号召。 (较长的名称)在已经创建目标文件之后。
这很有可能,但远非微不足道。
首先,您需要将.symtab
部分复制到文件末尾,并将所需的字符串food\0
附加到其中。
其次,如果在上一步中添加了部分,则需要更新部分表并将原始.symtab
的偏移量和长度替换为偏移量和大小。
最后,您需要找到符号(在.symtab
部分中)并使用第一步中添加的st_name
字符串的偏移量更新其food
。
这就是它的全部内容。