objdump命令分析
选项
显示.o文件中的text段的内容:
显示目标文件各个段的头部摘要信息:
objdump -s -d:显示文件所有段信息:
【数据段为标红方框】
可执行文件如何链接:
符号表里面的mysum被标记为UND(undefined),也就是在t1.o中没有定义,所以将来要通过ld(Linux下的链接器)的符号解析功能到别的模块中去查找是否存在函数mysum的定义。
对函数mysum的调用是通过call指令实现的,使用IP相对寻址方式,由于无法确定具体的地址,此时编译器只是将其赋了一个特殊的地址0x0,然后在最后的链接阶段再完成正确的地址赋值。在t2.c中找到该函数,重定位之后call指令中的这个偏移量被修改,最终的可执行程序就生成了。
链接部分大概的过程就是:
1、链接器接收到输入文件
2、收集每个输入文件的段表,合成一个全局符号表,这张表里包含所有定义的符号
3、如果是静态链接,将多个输入文件合并,进行地址空间的分配,在这一步完成之后所有符号的具体地址就定了
4、然后再对每一个输入文件中需要重定位的符号重新定位到正确的地址处