汇编都是大佬玩的?不!根本不是人玩的,至汇编的两三言
什么是是汇编语言?
最近在学习汇编,相信很多伙伴和我一样,学习汇编并不是为了用汇编写程序,而是为了看得懂一些汇编代码,从而去做如逆向,破解等方面的操作。
那么汇编语言是什么呢?
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
大家都知道在计算一种一切都是以二进制的方式存在的,但是如果程序员用0和1去编写代码,那是十分头疼的,所以就用一些方便记忆的单词(助记符)去替代机器指令,从而让编码更方便。
学习的痛苦
汇编语言是十分枯燥的,而且有很多奇怪的地方,比如为什么有各种各样的寻址方式 ,还有为什么叫立即数呢,它明明就是一个数字啊, 起个这么古怪的名字。
而且,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植,对于同一平台还有x32和x64甚至x16之分,学起来十分难受,初学者都不知道要选择什么平台。
那么现在还有必要学习汇编吗?
答案是有必要的。
汇编和最底层的硬件打交道( 注意是硬件啊) , 所以学习汇编能对计算机的运行机制有个透彻的了解, 至少需要掌握这些知识:
什么是寄存器
程序在内存和CPU中是怎么折腾的
CPU是如何访问内存的
程序的分段
机器层面如何实现函数调用(理解缓冲区溢出攻击的基础)
中断及其处理
......
有了这些知识,肯定对冯诺依曼计算机有了深刻认识。
而这些知识又构成了操作系统的基础,有了这些基础,理解进程/线程的概念,以及他们的实现就非常容易,还有虚拟内存、文件系统、 I/O 等等。并不是说必须学了汇编才能理解操作系统,而是说看问题的深度不一样。
有了汇编的保驾护航, 你可以在头脑中建立起一个有更多细节,更多实现的计算机, 那些概念不是模糊的,而是清晰的、鲜活的。
操作系统的运行原理, 绝对是程序员受益一生的知识。