PowerPC上ELF可执行文件的符号解析(二)
一.概念
在上一篇文章中介绍了符号解析的基本概念,象PLT表、Symbol表、Relocation表等,这些概念在64位环境仍然存在,但PLT表的意义在64位环境下发生了变化。在讲解64位环境下PowerPC符号解析的过程之前,先说64位和32位环境在汇编语言这个层次上的两个不同之处。
1.TOC(Table of Contents)
我们知道在32位环境下GOT表的地址是必须在汇编程序中计算出来的,具体的计算方法读者有兴趣可以自己写一个简单的程序,然后用gcc -fPIC -S来编译后察看汇编代码即可。64位环境下PowerPC引入了一个新的概念:TOC。它是可执行文件和共享库的一段数据,包括.got、.toc和small data area(用来存放local的小于指定大小的数据),最大可以有64K 字节。PowerPC 64 ABI规定了寄存器r2专门用来存放TOC基址,通常是(TOC的起始地址+0x8000)。一般而言,TOC中各个section的顺序是.gotàtocàsmall data area,所以TOC的起始地址就等于.got的地址。
2.函数描述符(Function Descriptor)
64位和32位一个很大的不同点就是函数描述符的引入。一个函数描述符是三个双字组成的结构:
第一个双字是该函数的真正入口点
第二个双字是该函数的TOC基址
第三个双字是为其他语言,比如Pascal和PL/1准备的环境指针
在64位环境下,和函数名相同的symbol名是函数描述符的地址,函数入口点symbol名是函数名前面加个点。比如我们定义了一个函数void Func(),那么用汇编表示,Func是它的函数描述符,.Func是它的函数入口点。
二.变量符号动态解析过程
变量符号的动态解析过程和32位的情况相比没有太多的变化,系统在载入程序过程中将变量symbol地址存入到TOC中,当需要引用变量symbol时就赋该变量所属的TOC基址到r2中,以r2
作为基址加上(变量symbol在TOC中的偏移量)就可以从TOC中取得该symbol的实际地址。所以仅仅是以r2替代GOT地址,相当于是换了个基址表示。
三.函数符号动态解析过程
上一页下一页1.ELF1.1规范中文版 http://m.doczj.com/doc/...en_US/a_doc_lib/aixassem/alangref/alangref.PowerPC上ELF可执行文件的符号解析(二),PowerPC上ELF可执行文件的符号解析(二)下载PowerPC上ELF可执行文件的符号解析(二)的内容摘要:PowerPC上ELF可执行文件的符号解析(二)一.概念在上一篇文章中介绍了符号解析的基本概念,象PLT表、Symbol表、Relocation表等,这些概念在64位环境仍然存在,但PLT表的意义在64位环境下发生了变化。在讲解64位环境PowerPC上ELF可执行文件的符号解析(二)
本文链接: http://enelf.immuno-online.com/view-735005.html