从32位指令学习64位汇编

时间:2015-04-06 19:10:50

标签: assembly

我一直在尝试使用Hacking:Art of Deception一书来学习汇编和编程。它有一个很棒的编程部分,可以让您更好地理解程序的内部工作原理,并让您更好地理解编程重要性时的准确性。但是,我一直很难跟上,因为这本书使用的是32位示例,我使用的是64位系统。我知道如何使用gcc编译为32位,或者我也调到了本书提供的32位cd,但我想我更愿意学习64位因为它可能比32位系统更具相关性(或者变得越来越相关? )。所以基本上我要问的是,我是否应该费心去尝试使用这本书来找出64位装配,因为我听说它有很大不同,或者我是否应该找到其他材料来分别学习64位装配?如果有任何易于理解的书籍涵盖64位英特尔汇编,我将不胜感激参考。

1 个答案:

答案 0 :(得分:1)

像Lurker在上面评论中所说的那样。既然你有一本32位的书,那就去学习吧。 32位仍然非常重要。

一旦你学会了32位的工作原理,那么64位添加的以下纲要将是轻而易举的。

  

寄存器数量翻了一倍,达到16。

     

所有寄存器都是64位长。 IA32寄存器的64位扩展名为%rax,%rcx,%rdx,%rbx,%rsi,%rdi,%rsp和%rbp。新寄存器名为%r8-%r15。

     

可以直接访问每个寄存器的低32位。这给了我们熟悉的IA32寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp,以及8个新的32位寄存器:%r8d-%r15d。

     

每个寄存器的低16位可以直接访问,就像IA32的情况一样。新寄存器的字大小版本命名为%r8w-%r15w。

     

可以直接访问每个寄存器的低8位。 IA32中的情况仅适用于前四个寄存器(%al,%cl,%dl,%bl)。其他IA32寄存器的字节大小版本命名为%sil,%dil,%spl和%bpl。新寄存器的字节大小版本命名为%r8b-%r15b。

     

为了向后兼容,寄存器%rax,%rcx,%rdx和%rbx的第二个字节可以由具有单字节操作数的指令直接访问。

来自Computer Systems A Programmer’s Perspective

的文字