【发布时间】:2019-02-08 23:48:13
【问题描述】:
通过研究ELF格式,可以看到目标文件中每个函数都有对应的符号,对应的符号表项的值为st_size,表示函数的大小。
问题是,即使我更改了目标文件中特定函数的st_size 并链接它,可执行文件仍然成功创建。以下代码是我使用的测试代码。
// In main.c,
int main(void)
{
myprintf("TEST");
}
// In log.c
#include <stdio.h>
void myprintf(const char *str)
{
printf(str);
}
在上面的代码中,我更改了log.o文件中myprintf函数的st_size值,并链接了log.o和main.o文件。默认情况下,st_size 值为 0x13。我通过将其更改为 0x00 对其进行了测试。我通过将其更改为 0x40 对其进行了测试。但是 a.out 结果文件的myprintf 功能很好。链接器如何确定每个函数的大小?
【问题讨论】: