《x86/x64体系探索及编程》试读有感
初读这本书,感觉像是手册级别的资料,纵观全书,对多个方面对处理器架构相关的知识进行了梳理介绍,内容详实、丰富,可作为Intel手册的中文生动版。书中每个章节都有相应的测试实验,生动的讲解、详尽的示例让原本枯燥无味的X86编程变得有了些味道
什么是PIC?
在本书试读提供的第二章讲到了PIC( Position-Independent
Code ),
即不依赖于位置的代码,也称作“位置无关代码”。PIC在函数调用和数据访问方面和传统代码有本质上的区别。
PIC通过“全局偏移表”间接访问函数和数据。这种方法一般是依赖于硬件的,但是通常都是使用一个特殊的寄存器去存放“全局偏移表”的位置。可以利用这种机制产生与虚拟装载地址无关的二进制代码。
在一个无需对代码段进行重定位的PIC库,只有GOT中的符号需要在运行时进行更新。更新的时候根据当前进程的地址空间中的其他的共享库的装载地址来进行。
同样,全局函数调用也被内核映像数据段中的“过程链接表”进行了重定向。这同样也是为了避免在运行时对代码段进行重定位。
在一般的平台上,当你进行编译时,需要指定PIC的选项,很少有平台会忽略这种差异。一般而言,大部分的代码都是位置无关的,很少情况下代码是位置相关的,代码相关也就意味着在这个平台上不支持共享库。为了实现位置无关性,需要增加相应的全局位置信息以及在运行时对这些信息进行调整,因此PIC会轻微增加代码空间和时间代价,但是共享库的复用带来的好处大大超过了这些。
对库而言,位置关联性非常重要,通常,建库工具使用PIC代码建立共享库,非PIC代码建立静态库。当建库工具调用编译器去编译时会指定是否需要PIC的编译选项,因此汇编代码需要注意这点。
如果想对X86处理器有一个深入的认识,这本《x86/x64体系探索及编程》还是必不可少的,这本书触及了X86的每一根神经,全面深入地为读者展现了x86处理器的高级特,内容涵盖之全、表达之详尽让你无法拒绝。你会体验到在实践中解决困难,应用所学知识的乐趣。不过这么厚的一本书想读完还真不容易,不过没关系,读者可以根据作者的建议阅读相关章节,照样可以获益匪浅!
分享到:
相关推荐
《x86_x64体系探索及编程》是由邓志编著的一本深入解析x86和x64架构的书籍。这本书详细介绍了这两种处理器架构的基础知识、工作原理以及编程技术,是理解现代计算机硬件与软件交互的重要参考资料。 在x86体系结构中...
《x86x64体系探索及编程》一书深入探讨了x86和x64架构下的计算机体系结构,并提供了丰富的源代码示例。在x86x64体系中,我们面对的是一个从32位向64位扩展的复杂而强大的处理器平台,它在现代计算机系统中占据了主导...
《x86/x64 体系探索及编程》是一本深入探讨x86和x64架构的书籍,尤其在DOS环境下进行了实践性的程序设计。邓志老师通过这本书,引领读者了解这两种主流处理器架构的基本原理,以及如何在DOS操作系统下编写程序。 ...
x86/x64体系探索及编程(带书签):本书是对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实...
x86_x64体系探索及编程,挺有趣的,希望使用高技术的人可以看一下
本书对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 此书可以看做intel...
11 1.2.4 unsupported 编码值 14 1.2.5 浮点数精度的转换 15 1.2.6 浮点数的溢出 17 1.2.7 BCD 码 20 1.2.8 SIMD 数据 21 第2 章 x86/x64 编程基础 23 2.1 选择编译器 23 2.2 机器语言 24 2.3 Hello world 25 2.3.1...
本书对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 此书可以看做intel...
x86与x64体系的探索,相关人士可以看一下
11 1.2.4 unsupported 编码值 14 1.2.5 浮点数精度的转换 15 1.2.6 浮点数的溢出 17 1.2.7 BCD 码 20 1.2.8 SIMD 数据 21 第2 章 x86/x64 编程基础 23 2.1 选择编译器 23 2.2 机器语言 24 2.3 Hello world 25 2.3.1...
11 1.2.4 unsupported 编码值 14 1.2.5 浮点数精度的转换 15 1.2.6 浮点数的溢出 17 1.2.7 BCD 码 20 1.2.8 SIMD 数据 21 第2 章 x86/x64 编程基础 23 2.1 选择编译器 23 2.2 机器语言 24 2.3 Hello world 25 2.3.1...
11 1.2.4 unsupported 编码值 14 1.2.5 浮点数精度的转换 15 1.2.6 浮点数的溢出 17 1.2.7 BCD 码 20 1.2.8 SIMD 数据 21 第2 章 x86/x64 编程基础 23 2.1 选择编译器 23 2.2 机器语言 24 2.3 Hello world 25 2.3.1...
之所以将释放的文件放在10980_x86或10980_x64下面是为了同一目录下支持运行不同版本的Sqlite(一般很少见),如果文件已经存在,则对比文件的MD5值,不一样则进行覆盖(如果不同版本,这样就会出错了)。 资源包中有...
本书对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 此书可以看做intel...
本文将深入探讨“C/C++ 进程无模块内存注入[x86/x64]”这一主题,涵盖Windows下的R3无模块注入技术,以及如何实现对x86和x64架构的通用支持。 首先,我们要理解什么是“进程无模块内存注入”。通常,内存注入涉及到...
CefSharp 支持mp3、mp4视频...平台:x86/x64(都支持) 使用:先在Nuget中安装对应的版本,然后解压资源把Release下的文件复制替换到:项目根目录\packages\cef.redist.x86.3.2623.1401\CEF\x86,重新编译项目即可。
之所以将释放的文件放在10950_x86或10950_x64下面是为了同一目录下支持运行不同版本的Sqlite(一般很少见),如果文件已经存在,则对比文件的MD5值,不一样则进行覆盖(如果不同版本,这样就会出错了)。 资源包中有...
X86/X64软件逆向分析【提高篇】课前准备&工具安装与配置(1)课程回顾:《x86/x64软件逆向分析入门》Visual Studio 2019开发套件:ht