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

本书《x86/x64体系探索及编程》深入解析处理器架构,从手册级资料的角度出发,详细介绍了X86编程的高级特性。重点解释了PIC(位置无关代码)的概念,包括其原理、优点以及对库构建的影响。书中还提供了丰富的测试实验,使得原本枯燥的编程学习变得更加生动有趣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

什么是PIC

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

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

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

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

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

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

 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值