x86 Linux与Windows?

我正在寻找一本更加面向Windowsx86书籍(本书是一个非常出色的书籍,Irvine,x86处理器的汇编语言)。

我不想学习Windows特有的信息,只是各种指令是什么? 这本书似乎是最好的解释它 – 只是它不针对Linux(我开发)。 我会没事,因为x86和Windows上的指令是相同的,只是一些调用约定可能会不同呢?

build议最受欢迎

Solutions Collecting From Web of "x86 Linux与Windows?"

在Windows和Linux下,汇编程序指令是相同的,因为两个OS都运行在CPU上。 所以任何介绍x86汇编的书都可以很好地学习汇编。 但只知道汇编助记符是不够的写作业代码。 必须学习适当的系统调用/ API才能与操作系统交互。 即使是屏幕上最简单的字符输出,也必须在现代操作系统上使用系统调用。 所以,我建议先学习x86程序集,然后再学习特定的操作系统内核,即API。

Windows x86 / x64和Linux版本没有区别。
API和调用约定(ABI) 不同的。

调用约定
这里是关于ABI的信息: http : //www.agner.org/optimize/ (见手册#5)。
显然这个API也是非常不同的,但是如果你正确的调用约定,你应该可以得到一些有意义的输入/输出。

API:从编译器学习
我建议你用高级语言C / D / Pascal做大多数东西,而且只有在组装时才能真正加速关键的东西。
另一个有用的方法是在C中编写一个简单的例程,然后检查反汇编以查看API函数的调用是如何工作的。
x64是未来的方式,所以我不会再去学习x86_32的代码了。

不要写慢组装
如果你认为你可以智取编译器,那么最好再想一想,因为新的x64处理器是非常复杂的。
如果你想知道所有关于这个东西的信息,你可以在agner的手册(2,3和4)中找到,但是那个兔子洞很深。

首先,您仍然可以使用WINE在Linux中编译,测试和调试Windows应用程序。 所以,阅读Windows装配图书并不是那么没用 – 你将学习一个更多的汇编程序平台。 🙂

但是这里有一个可能 – 这本书使用了什么汇编器? 汇编语法很重要,因为不同的汇编程序使用不同的语法。 而一些汇编器只针对特定的操作系统。 一个这样的例子是MASM和其他TASM。 如果你的书使用了其中的一个,那么即使是大会的学习也几乎是无用的,因为最后你将不得不学习另外一种语法来编写一些实用的程序。

我会建议坚持使用一些可移植汇编语言编译器作为FASM或NASM 。 IMO,FASM是更好的,因为它是自给自足的,不依赖于任何其他工具。 (毕竟这是完全写在程序集中的)。

对于Linux汇编编程,我建议你从sourceforge下载非凡的“ Linux x86汇编软件开发助手工具包 ” 。 这个软件包包含了用于Linux系统调用的很好的面向组装的手册,包含文件以及Linux汇编程序的许多例子。 Linux编程是“必须具备的”。

最后,这些书当然是很棒的,但是在线社区可以帮助你更好地理解。 所以,我建议访问一些友好的留言板 。 这可能是非常有用的。