Documentation 学习Linux x86-64汇编的建议;文档

Documentation 学习Linux x86-64汇编的建议;文档,documentation,assembly,x86,x86-64,doc,Documentation,Assembly,X86,X86 64,Doc,有人有关于学习Linux x86-64汇编基础知识的文档吗?我不确定是按原样学习,还是先学习x86,然后再学习,但由于我有一台x86-64计算机而不是x86,所以我想改学x86-64;) 也许有人可以给我一些激励和指导,让我学习什么、如何学习以及使用什么文档 请给我您最喜欢的文档标题,我编写了一个小Python,这是我第一次尝试使用较低级别的语言,我已经做好了充分的准备 感谢大家看一看,这是Linux汇编开发的最佳场所,您将找到资源、文档和链接。对x86的规范性引用可能是最重要的。我还有几卷这一

有人有关于学习Linux x86-64汇编基础知识的文档吗?我不确定是按原样学习,还是先学习x86,然后再学习,但由于我有一台x86-64计算机而不是x86,所以我想改学x86-64;)

也许有人可以给我一些激励和指导,让我学习什么、如何学习以及使用什么文档

请给我您最喜欢的文档标题,我编写了一个小Python,这是我第一次尝试使用较低级别的语言,我已经做好了充分的准备


感谢大家

看一看,这是Linux汇编开发的最佳场所,您将找到资源、文档和链接。

对x86的规范性引用可能是最重要的。我还有几卷这一系列的书,是从PIII刚推出的时候开始的。还有一个问题可能很有趣,因为英特尔在x86-64设计方面并没有完全效仿AMD,但我还没有读过

与宣传的完全一样:x86(-64)操作码和指令,而不是其他。如果您想快速搜索某些特定说明,请使用此工具。

一般建议: 它不仅仅是“x86汇编程序”。每个汇编器都有点不同,它们通常不兼容。我推荐NASM汇编程序,因为它使用广泛,易于安装,并且支持64位汇编

阅读一本关于x86汇编程序的好书,了解基本知识(寄存器、条件跳转、算术等)。我刚开始的时候读了兰德尔·海德的《装配艺术》

看起来它有一些很好的教程,你可能需要学习。但是如果您是在64位模式下组装,请注意C函数和系统调用的调用约定是不同的

您需要CPU参考手册。就我个人而言,我更喜欢AMD的。您需要CPU手册的第1卷和第3卷。其他卷可能也很有趣

64位特定通知 64位x86程序集几乎与32位x86程序集相同,因为64位x86主要向后兼容32位。您可以访问64位寄存器和一些其他功能,一些模糊的指令不再有效,其余的与32位相同

但是,64位Linux上的系统调用约定完全不同。根据内核的不同,32位系统调用可能可用,也可能不可用。更糟糕的是,64位调用约定的文档记录很差。我只是通过深入研究glibc源代码才发现了这一点


为了省去您费心费力地找出这个问题的麻烦,系统调用号在Linux源代码中的
arch/x86/include/asm/unistd_64.h
下。系统调用号在
rax
寄存器中传递。参数位于
rdi
rsi
rdx
r10
r8
r9
。使用
syscall
指令调用该调用。
syscall
覆盖
rcx
寄存器。返回值在
rax
中。(可以找到一个简单的例子。)

我会选择一个更好的标题,比如“关于在Linux x86_64上学习英特尔汇编的建议?”请注意,x86中的每一条指令也会出现在x86-64中—也只有一堆新指令。您可能会发现编写一些非常简单的C代码并查看编译器创建的程序集会更容易开始—然后您就有了一个工作示例。英特尔文档不是开始学习汇编程序的好地方。我认为这是开始学习汇编程序的好地方。在英特尔开发人员手册中,没有提到汇编程序(nasm、masm等)或内联汇编,当然也没有提到linux常用的at&t语法。即使你咀嚼所有的视频,你也无法在屏幕上显示一个简单的“Hello World”。虽然它是一个很好的参考资料(我一直在使用它),但这显然不是开始使用汇编程序的地方,而是我开始使用汇编程序的地方。诚然,我以前对68000汇编有一点经验,并且知道如何使用
gcc
,通过查看
objdump
反汇编,我弄清了AT&T和Intel语法之间的区别,并在Linux源代码中查找了系统调用,但如果我能做到这一点,OP也可以;-)“查看对象代码”实际上是学习汇编程序的一个好建议;-)有一些真实世界的代码来进行比较,这会教你很多东西。英特尔参考资料中确实缺少代码示例。即使在汇编程序编码实践中,我也很难弄清楚更晦涩的sse指令有什么用,因为它们只在与其他sse指令结合使用时才有意义。当然也没有提到是哪一个。AMD文档在这方面做得更好。另一本可能的基本汇编书籍是组装语言:Step by Step,第三版,由Jeff Duntemann编写,重点介绍使用NASM的Linux上的x86-32,第三版于2010年出版。Randall Hyde还有一个信息量非常丰富的装配艺术网站