`
Moonwolf009
  • 浏览: 7303 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

    博客分类:
  • X86
X86 
阅读更多

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体系探索及编程part1

    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...

    x86_x64体系探索及编程(邓志)高清最新版

    仅供学习之用,勿做商业用途,如有侵权,请告知删除,谢谢

    x86/x64体系探索及编程

    x86/x64体系探索及编程(带书签):本书是对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实...

    x86x64体系探索及编程-DOS版本程序

    邓志老师的 <<x86/x64 体系探索及编程>>,改写为 DOS 下的程序,包含全部的练习程序。

    x86_x64体系探索及编程

    x86_x64体系探索及编程,挺有趣的,希望使用高技术的人可以看一下

    x86x64体系探索及编程

    本书是对Intel手册所描述的处理器架构进行探索和论证,每个章节都有相应的测试实验,所运行的实验例子可以在真实的机器上执行。部分实验是不能在VMware虚拟机和bochs模拟器上进行的,必须要在真实机器上运行。例如:...

    x86/x64体系探索及编程.part3

    本书对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 此书可以看做intel...

    x86/x64体系结构探索及编程.part1

    本书对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 此书可以看做intel...

    X86 X64体系探索

    x86与x64体系的探索,相关人士可以看一下

    x86 x64体系探索及编程part4

    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...

    x86 x64体系探索及编程 part2

    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...

    x86 x64体系探索及编程part3

    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...

    Sqlite C# AnyCPU X86/X64 32位/64位 自适应 3.8.11.1

    之所以将释放的文件放在10980_x86或10980_x64下面是为了同一目录下支持运行不同版本的Sqlite(一般很少见),如果文件已经存在,则对比文件的MD5值,不一样则进行覆盖(如果不同版本,这样就会出错了)。 资源包中有...

    x86/x64体系结构探索及编程.part2

    本书对Intel手册所述处理器架构的探索和论证。全书共五大部分,从多个方面对处理器架构相关的知识进行了梳理介绍。书中每个章节都有相应的测试实验,所运行的实验例子都可以在真实的机器上执行。 此书可以看做intel...

    CefSharp 49 x86/x64 支持mp3/mp4/h.264

    CefSharp 支持mp3、mp4视频...平台:x86/x64(都支持) 使用:先在Nuget中安装对应的版本,然后解压资源把Release下的文件复制替换到:项目根目录\packages\cef.redist.x86.3.2623.1401\CEF\x86,重新编译项目即可。

    Sqlite C# AnyCPU X86/X64 32位/64位 自适应

    之所以将释放的文件放在10950_x86或10950_x64下面是为了同一目录下支持运行不同版本的Sqlite(一般很少见),如果文件已经存在,则对比文件的MD5值,不一样则进行覆盖(如果不同版本,这样就会出错了)。 资源包中有...

    x86x64软件逆向分析【提高篇】 1

    X86/X64软件逆向分析【提高篇】课前准备&工具安装与配置(1)课程回顾:《x86/x64软件逆向分析入门》Visual Studio 2019开发套件:ht

    toad for oracle x86/x64 下载

    toad for oracle x86/x64 下载

Global site tag (gtag.js) - Google Analytics