《x86/x64体系探索及编程》试读有感

x86/x64体系探索及编程》试读有感

初读这本书,感觉像是手册级别的资料,纵观全书,对多个方面对处理器架构相关的知识进行了梳理介绍,内容详实、丰富,可作为Intel手册的中文生动版。书中每个章节都有相应的测试实验,生动的讲解、详尽的示例让原本枯燥无味的X86编程变得有了些味道

什么是PIC

在本书试读提供的第二章讲到了PIC( Position-Independent Code ) 即不依赖于位置的代码,也称作“位置无关代码”。PIC在函数调用和数据访问方面和传统代码有本质上的区别。

PIC通过“全局偏移表”间接访问函数和数据。这种方法一般是依赖于硬件的,但是通常都是使用一个特殊的寄存器去存放“全局偏移表”的位置。可以利用这种机制产生与虚拟装载地址无关的二进制代码。

在一个无需对代码段进行重定位的PIC库,只有GOT中的符号需要在运行时进行更新。更新的时候根据当前进程的地址空间中的其他的共享库的装载地址来进行。

同样,全局函数调用也被内核映像数据段中的“过程链接表”进行了重定向。这同样也是为了避免在运行时对代码段进行重定位。

在一般的平台上,当你进行编译时,需要指定PIC的选项,很少有平台会忽略这种差异。一般而言,大部分的代码都是位置无关的,很少情况下代码是位置相关的,代码相关也就意味着在这个平台上不支持共享库。为了实现位置无关性,需要增加相应的全局位置信息以及在运行时对这些信息进行调整,因此PIC会轻微增加代码空间和时间代价,但是共享库的复用带来的好处大大超过了这些。

对库而言,位置关联性非常重要,通常,建库工具使用PIC代码建立共享库,非PIC代码建立静态库。当建库工具调用编译器去编译时会指定是否需要PIC的编译选项,因此汇编代码需要注意这点。

 

如果想对X86处理器有一个深入的认识,这本《x86/x64体系探索及编程》还是必不可少的,这本书触及了X86的每一根神经,全面深入地为读者展现了x86处理器的高级特,内容涵盖之全、表达之详尽让你无法拒绝。你会体验到在实践中解决困难,应用所学知识的乐趣。不过这么厚的一本书想读完还真不容易,不过没关系,读者可以根据作者的建议阅读相关章节,照样可以获益匪浅!

 

猜你喜欢

转载自moonwolf009.iteye.com/blog/1727472